簡體   English   中英

Elasticsearch突出顯示嵌套對象

[英]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過濾器,是否可以突出顯示嵌套對象中的匹配項? 突出顯示查詢將如何顯示。

非常感謝您的回復。

同樣的問題在這里。 似乎現在有辦法在彈性搜索中做到這一點,並且不會在不久的將來。

開發人員Shay Banon寫道

為了基於嵌套查詢進行突出顯示,還需要提取嵌套文檔以突出顯示它,這更有問題(並且性能較差)。

另外

他的解釋是,這會占用大量的記憶,因為可能會有大量的孩子。 它看起來很真實,因為添加此功能將違反一次只處理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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM