[英]Elasticsearch highlight with nested objects
我有一个关于突出显示嵌套对象字段的问题。
考虑这样的记录:
_source: {
id: 286
translations: [
{
id: 568
language: lang1
value: foo1 bar1
}
{
id: 569
language: lang2
value: foo2 bar2
}
]
}
如果translations.value有ngram过滤器,是否可以突出显示嵌套对象中的匹配项? 突出显示查询将如何显示。
非常感谢您的回复。
同样的问题在这里。 似乎现在有办法在弹性搜索中做到这一点,并且不会在不久的将来。
为了基于嵌套查询进行突出显示,还需要提取嵌套文档以突出显示它,这更有问题(并且性能较差)。
另外 :
他的解释是,这会占用大量的记忆,因为可能会有大量的孩子。 它看起来很真实,因为添加此功能将违反一次只处理N个Feed的基本概念。
因此,唯一的方法是在您自己的程序中手动处理查询结果以添加突出显示。
更新
我不知道轮胎或ngram过滤器,但我找到了一种方法,通过使用嵌套的facets和facet过滤器来检索所有匹配嵌套文档的过滤器。 你需要一个单独的查询突出显示,但它比浏览_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');
}
});
我希望这有点帮助。
您可以在字段中使用force_source“:true,以便在连接嵌套字段后突出显示文档。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.