2013-03-05 162 views
7

我有一個關於突出顯示嵌套對象字段的問題。Elasticsearch突出顯示嵌套對象

考慮這樣的記錄:

_source: { 

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

} 

如果translations.value有NGRAM過濾器,是有可能突出強調嵌套對象匹配,如這一個? 突出顯示查詢的外觀如何。

非常感謝您的回覆。

+0

打同樣的問題今天 - 它告訴我,我有一個亮點(例如,值:foo2的 BAR2當我搜索foo2),但不是簡單的方式綁定回源文件 – Phantomwhale 2013-03-15 04:19:36

回答

3

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

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

我希望幫助一點點。 。

-1

您可以使用force_source」:真下地導致文檔被高亮一旦嵌套字段加入

相關問題