2013-03-05 22 views
7

入れ子になったオブジェクトフィールドの強調表示について質問があります。入れ子になったオブジェクトでの強調検索の強調表示

このようなレコードを考えてみましょう:translations.valueはNGRAMフィルタを持っている場合は、そのようなこの1のように、ネストされたオブジェクト内の一致を強調することが可能である

_source: { 

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

} 

を? ハイライトクエリはどのように見えますか?

お返事ありがとうございます。

+0

今日、同じ問題をヒット - それは私がハイライトを持っていると言われます(例えば値:foo2は BAR2私はfoo2を検索しますが、元のドキュメントに戻す簡単な方法ではありません) – Phantomwhale

答えて

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」を使用することができます:ドキュメントが一度ネストされたフィールドが結合されて強調表示することが発生するの分野で真の

関連する問題