2017-04-27 62 views
1

我在做full text searchElasticSearch。我正在使用Query String Query。我正在用Multi Field功能進行搜索。ElasticSearch:具有多字段的query_string的全文本搜索

我的查詢看起來象下面這樣:

{ 
    "query": { 
     "query_string": { 
      "fields": [ 
       "field1^5", 
       "field2^5", 
       "field3^1", 
       "field4^1", 
       ................... 
       ................... 
      ], 
      "query": "....", 
      "default_operator": "OR", 
      "analyzer": "standard" 
     } 
    } 
} 

我有超過30 fields我的收藏。對於我的要求,我需要確保fieldA,fieldB需要先搜索。因此這些字段將有higher priority。其他字段都有low and equal priority

那麼,有什麼方法可以讓我不必specify all the field names in the query。我只想指定那些具有較高優先級的字段,即fieldA,fieldB。但是,應該根據優先級順序在所有字段上執行搜索。

我怎麼能做到這一點?

+0

不明白你的問題。 @oblivion –

+0

@DivyeshGausvami簡而言之,我想在多個領域進行全文搜索。在這些領域中,其中兩個具有非常高的優先級,需要先匹配。因此,在查詢中,我只想通過給它們更高的提升值來指定這兩個字段。如果這兩個字段不匹配查詢,那麼只有其他字段需要匹配。那麼在這裏,我是否總是需要指定查詢中的所有字段?有沒有辦法在查詢中列出所有低優先級字段? – oblivion

+0

'{ 「查詢」:{ 「multi_match」:{ 「查詢」: 「搜索字符串」, 「田」: 「字段1」, 「字段2」,......, 「字段N」] } } }' 這可能對您有幫助?我對嗎 ? –

回答

2

試試這個。經過我的系統測試,其對我的工作: -

{ 
    "query": { 
     "query_string": { 
      "fields": [ 
       "field1^5", 
       "field2^5", 
       "_all", 
      ], 
      "query": "....", 
      "default_operator": "OR", 
      "analyzer": "standard" 
     } 
    } 
} 
+1

它的工作原理。非常感謝 !!還有一件事我想問的是,我是否也需要爲'_all'指定優先級,比如:''_all^1「'? – oblivion

+1

沒有必要。根據彈性搜索文檔 - 「boost - 設置查詢的提升值,默認爲1.0」。 https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-query-string-query.html –

+0

好的。謝謝 :) – oblivion

相關問題