【问题标题】:Elasticsearch highlight with nested objects使用嵌套对象突出显示 Elasticsearch
【发布时间】:2013-03-05 17:44:12
【问题描述】:

我有一个关于突出显示嵌套对象字段的问题。

考虑这样的记录:

_source: {

    id: 286
    translations: [
        {
            id: 568
            language: lang1
            value: foo1 bar1
        }
        {
            id: 569
            language: lang2
            value: foo2 bar2
        }
    ]

}

如果 translations.value 有 ngram 过滤器,是否可以突出显示嵌套对象中的匹配项,例如这个? 以及高亮查询的样子。

非常感谢您的回复。

【问题讨论】:

  • 今天遇到同样的问题 - 它告诉我我有一个突出显示(例如,当我搜索 foo2 时,值:foo2 bar2),但将其与源文件

标签: elasticsearch tire


【解决方案1】:

这里也有同样的问题。似乎现在有办法在弹性搜索中做到这一点,并且不会在不久的将来。

Developer Shay Banon wrote

为了基于嵌套查询做高亮,嵌套的 还需要提取文档以突出显示它, 这更成问题(而且性能更差)。

Also

他的解释是,这将占用大量内存,因为 可以有大量的孩子。它在我看来是真实的 添加此功能将违反仅处理的基本概念 一次 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');
            }
        });

希望对你有所帮助。

【讨论】:

    【解决方案2】:

    您可以在字段中使用 force_source" : true 以在连接嵌套字段后突出显示文档。

    【讨论】:

      猜你喜欢
      • 2019-05-18
      • 2017-06-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-24
      • 2019-09-10
      • 1970-01-01
      • 2021-10-18
      相关资源
      最近更新 更多