1

でクエリを参加誰も私を助けることができますか?私は子ノードでは、2つのノードを持つ特には、私が使用してfirebase elasticsearch、 に参加するクエリを実行する必要がありElasticSearch

私は父ノードのIDであるフィールドを持っていると私は、結果として、父親のノードのすべてのフィールドを持っていると思います。

どのように私はコードで私のインデックスを作成できますか?

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); 
}); 
} 

そして、クエリ結果を取るために:私のクライアントで私はここにelasticsearchclient、 を使用し、追加で

は、インデックスへのコードのノードの抽出物である

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(); 

} 

はにありがとう

+0

両方のノードに同じデータがあるはずですか?適切なネストされたマッピング(親子階層)を作成することに焦点を当てる必要があります – informer

+0

例を使用してそれを行う方法を教えてください 私はリンクhttps://www.elastic.co/guide/en/elasticsearchを読んでいます/reference/current/joining-queries.html、 それは非常に合成ですありがとう – Matteo

答えて

0

を進め、あなたのデータを保存するには、2つの方法があります。 最初にネストされたドキュメントを作成しています。これは、値の一部を検索してディスプレイのその他の情報のみを必要とする場合に役立ちます。

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

例:

「STR1」、「親1」、「child1の」 「str2の」「親1」、「あなたが任意の階層を維持する必要がない場合は、 あなたは、単に3つの別々の列を作成し、同様に保存することができますchild2の」

フラットデータ。

あなたは親1のIDを指定し、両方のケース内のすべてのドキュメントを検索することができます。

+0

これは役に立ちますか? – informer

+0

申し訳ありませんが、私はまだ理解していません。 ネストされたドキュメントを作成するには、どのようにコードを実装しますか? – Matteo