【问题标题】:Join query with ElasticSearch使用 ElasticSearch 加入查询
【发布时间】:2017-10-06 11:03:36
【问题描述】:

我需要使用 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();

}

提前谢谢你

【问题讨论】:

标签: javascript node.js firebase elasticsearch firebase-realtime-database


【解决方案1】:

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

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 并在这两种情况下搜索所有文档。

【讨论】:

  • 这有帮助吗?
  • 对不起,我还是不明白。要创建嵌套文档,我该如何实现我的代码?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-12-12
  • 2016-12-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-31
  • 2020-08-05
相关资源
最近更新 更多