我需要使用elasticsearch在Firebase上执行联接查询,
谁能帮我?

特别是我有两个节点,在子节点中,我有一个字段是父节点的ID,因此,我希望拥有父节点的所有字段。

如何在代码中建立索引?

另外,在我的客户端中,我使用elasticsearchclient,
这是索引节点的代码摘录:

var db = admin.database();
var etest = db.ref(type);
etest.on('child_added',   createOrUpdateIndex);
etest.on('child_changed', createOrUpdateIndex);
etest.on('child_removed', removeIndex);

function createOrUpdateIndex(snap) {

 client.index(index, type, snap.val(), snap.key)
 .on('data', function(data) { console.log('indexed', snap.key + data ); })
 .on('error', function(err) { console.log('index error ', err); }).exec();
}

 function removeIndex(snap) {
  client.deleteDocument(index, type, snap.key, function(error, data) {
    if( error ) console.error('failed to delete', snap.key, error);
    else console.log('deleted', snap.key);
 });
}

并获取查询结果:
var queue = db.ref("search");
queue.child('request').on('child_added', processRequest);

function processRequest(snap) {
    console.log('process...... ');
   snap.ref.remove(); // clear the request after we receive it
   var data = snap.val();
   // Query ElasticSearch
    client.search(index, data.type, { "query": { 'query_string': {
            "query" : data.query
        }}})

   .on('data', function(results) {
       var res = JSON.parse(results);
       console.log(JSON.stringify(res.hits));
       console.log("TOTAL " + JSON.stringify(res.hits.total));
       queue.child('response/'+snap.key).set(results);
   })

   .on('error', function(error){ console.log("errore"); }).exec();

}

先感谢您

最佳答案

有两种存储数据的方法。
首先是创建一个嵌套文档。如果您需要对某些值执行搜索并且仅需要其他信息进行显示,这将很有帮助。

PUT /my_index {
"mappings": {
"yourIndex": {
  "properties": {
    "yourColumn": {
      "type": "nested",
      "properties": {
        "name":    { "type": "string"  },
        "parentNode": { "type": "string"  },
        "childNode":     { "type": "string"   }
      }
    }
  }
}}}

例如。

'str1','parent1','child1'
'str2''parent1','child2'

如果您不需要维护任何层次结构,
您可以简单地创建3个单独的列并像平面数据一样存储。

您可以指定parent1 id并在两种情况下搜索所有文档。

07-24 17:35