2015-12-05 71 views
2

我有兩個查詢。基於elasticsearch的term或bool查詢匹配突出顯示

{'bool': 
    {'must': 
     { 'terms': 'metadata.loc':['ten','twenty']} 
     { 'terms': 'metadata.doc':['prince','queen']} 
    } 
    {'should':   
     { 'match': 'text':'kingdom of dreams'} 
    } 
}, 
{'highlight': 
    {'text': 
     {'type':fvh, 
      'matched_fields':['metadata.doc','text'] 
     } 
     } 
} 

有兩個問題?

  1. 爲什麼帶查詢匹配的文檔會突出顯示,而只有必須匹配的文檔纔會突出顯示。

  2. 有什麼辦法可以提到特定於上述術語查詢的突出顯示條件嗎?

這意味着{ 'terms': 'metadata.loc':['ten','twenty']}

亮點條件和{ 'terms': 'metadata.doc':['prince','queen']}

回答

0

1一個單獨的亮點條件)只有應查詢文件也越來越突出,因爲你強調只針對text場基本上是你的應該從句。雖然您使用的是matched_fields,但您只考慮text字段。

Docs

所有matched_fields必須term_vector設置爲with_positions_offsets但僅領域該被組合的比賽被載入所以只有那些字段將不必店設置爲yes受益。

而且要結合兩個完全不同的領域,'matched_fields':['metadata.doc','text'],這是很難從文檔

從技術上理解,這又是也細到字段添加到不共享相同matched_fields底層字符串作爲匹配組合的字段。結果可能沒有多大意義,如果其中一個匹配不在文本的末尾,那麼整個查詢將失敗。

2)你可以寫具體到項查詢亮點條件與Highlight Query

查詢

{ 
    "query": { 
    ...your query... 
    }, 
    "highlight": { 
    "fields": { 
     "text": { 
     "type": "fvh", 
     "matched_fields": [ 
      "text", 
      "metadata.doc" 
     ] 
     }, 
     "metadata.doc": { 
     "highlight_query": { 
      "terms": { 
      "metadata.doc": [ 
       "prince", 
       "queen" 
      ] 
      } 
     } 
     }, 
     "metadata.loc": { 
     "highlight_query": { 
      "terms": { 
      "metadata.loc": [ 
       "ten", 
       "twenty" 
      ] 
      } 
     } 
     } 
    } 
    } 
} 

這是否幫助你的highlight一部分試試這個?

+0

chintan .... { '突出顯示': { '文本': { '類型':FVH, 'matched_fields':[ 'metadata.doc', '文本'] } } }。這應該突出顯示是否必須查詢文本字段中的metadata.doc內容的匹配嗎? –

+0

我認爲'metadata.doc'值需要放在'text'字段中以便突出顯示,所以_prince_,_queen_應該是'text'的一部分,這兩個字段也被「分析」,並且引用文檔,將它們分組可能沒有意義。 – ChintanShah25