ここでも同じ問題。弾性検索でそれを行う方法があり、近い将来にはないようです。
開発者のシェイ・バノンは次のように書いています。
ネストされたクエリに基づいて強調表示を行うには、ネストされたドキュメントを抽出して強調表示する必要がありますが、これはより問題があります (そしてパフォーマンスが低下します)。
また:
彼の説明は、多数の子が存在する可能性があるため、これにはかなりの量のメモリが必要になるというものでした。この機能を追加すると、一度に N 個のフィードのみを処理するという基本概念に違反するため、私には本物のように見えます。
したがって、唯一の方法は、独自のプログラムでクエリの結果を手動で処理してハイライトを追加することです。
アップデート
タイヤまたは ngram フィルターについてはわかりませんが、ネストされたファセットとファセット フィルターを使用して、フィルターに一致するネストされたドキュメントをすべて取得する方法を見つけました。強調表示には別のクエリが必要ですが、少なくとも私の場合は、_source を参照するよりもはるかに高速です。
{"query":
{"match_all":{}},
"facets":{
"matching_translations":{
"nested":"translations",
"terms":{"field":"translations.value"},
"facet_filter":{
"bool":{"must":[{"terms":{"translations.value":["foo1"]}}]}
}
}
}
}
結果のファセット用語を使用して、プログラムで強調表示できます。
例: ネストされたドキュメントへのリンクを強調表示したい (jquery):
setHighlights = function(sdata){
var highlightDocs = [];
if(sdata['facets'] && sdata['facets']['docIDs'] && sdata['facets']['doctIDs']['terms'] && sdata['facets']['docIDs']['terms'].length >0){
for(var i in sdata['facets']['docIDs']['terms']){
highlightDocs.push(sdata['facets']['docIDs']['terms'][i]['term'])
}
}
$('li.document_link').each(function(){
if($.inArray($(this).attr('id'),highlightDocs) != -1) {
$(this).addClass('document_selected');
}
});
それが少し役立つことを願っています。