2016-10-11 695 views
0

以下查詢查找具有所有的詞「look」的文件,「for」和「此:ElasticSearch查詢字符串查詢default_operator

"query": { 
      "query_string": { 
       "query": "look for this", 
       "default_operator":"AND" 
      } 
     } 

雖然這一發現有任何的任何文件三個字:

"query": { 
      "query_string": { 
       "query": "look for this", 
       "default_operator":"OR" 
      } 
     } 

我的問題是如何改變查詢,以便它執行谷歌風格的搜索,即它首先列出具有所有條款則有其中的任何文件的文件

我將不勝感激任何幫助。

回答

1

默認情況下,Elasticsearch會給所有條款存在的文檔提供更高的分數。你可以使用explain api來看看。

如果你真的想給文檔非常高的分數,所有的條件都存在,那麼你可以使用bool query

{ 
    "query": { 
    "bool": { 
     "should": [ 
     { 
      "query_string": { 
      "default_field": "title", 
      "query": "look for this", 
      "default_operator": "AND" 
      } 
     }, 
     { 
      "query_string": { 
      "default_field": "title", 
      "query": "look for this" 
      } 
     } 
     ] 
    } 
    } 
} 

編輯1

你可以使用fuction score query給予高提振預期的結果。嘗試以下查詢

{ 
    "query": { 
    "function_score": { 
     "query": { 
     "bool": { 
      "should": [ 
      { 
       "query_string": { 
       "fields": [ 
        "title" 
       ], 
       "query": "look for this", 
       "default_operator": "AND" 
       } 
      }, 
      { 
       "query_string": { 
       "query": "look for this", 
       "fields": [ 
        "title" 
       ] 
       } 
      } 
      ] 
     } 
     }, 
     "functions": [ 
     { 
      "filter": { 
      "query": { 
       "query_string": { 
       "fields": [ 
        "title" 
       ], 
       "query": "look for this", 
       "default_operator": "AND" 
       } 
      } 
      }, 
      "weight": 10 
     } 
     ] 
    } 
    } 
} 
+0

我試過這個,但它並沒有將所有單詞都放在頂部。我怎樣才能做到這一點? – na1368

+0

我又增加了一個方法,如果你還沒有得到想要的結果,你可以嘗試改變重量到100。我仍然不確定ES爲什麼不會給所有條款的文檔都給予高分,你正在使用哪個版本的ES?你也在'_all'字段上唧唧喳喳,但我不知道這可能是一個問題 – ChintanShah25