【发布时间】: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();
}
提前谢谢你
【问题讨论】:
-
两个节点不应该有相同的数据吗?您应该专注于创建适当的嵌套映射(父子层次结构)
-
你可以用一个例子告诉我怎么做,我正在阅读链接elastic.co/guide/en/elasticsearch/reference/current/…,但它非常合成谢谢
标签: javascript node.js firebase elasticsearch firebase-realtime-database