2017-04-11 70 views
8

我是新來的彈性搜索,我很困惑必須和過濾器。我想我的條件之間執行和操作,所以我做了這個elasticsearch中Query DSL中must和filter之間有什麼區別?

POST /xyz/_search 
{ 
    "query": { 
    "bool": { 
     "must" : [ 
      { 
      "term": { 
      "city": "city1" 
      } 
     }, 
     { 
      "term": { 
      "saleType": "sale_type1" 
      } 
     } 
     ] 
    } 
    } 
} 

這給了我所要求的結果符合這兩個條件,並使用過濾器這樣

POST /xyz/_search 
{ 
    "query": { 
    "bool": { 
     "must" : [ 
      { 
      "term": { 
      "city": "city1" 
      } 
     } 
     ], 
     "filter": { 
     "term": { 
      "saleType": "sale_type1" 
     } 
     } 
    } 
    } 
} 

我得到相同結果,所以什麼時候應該使用必須,何時應該使用過濾器?有什麼不同?

+0

直接的答案都可以找到[這裏](https://www.elastic.co/guide/en/elasticsearch/reference/current/查詢過濾context.html#查詢過濾器上下文)。 – avr

回答

9

must有助於評分。在filter中,查詢的分數被忽略。

mustfilter中,子句(查詢)必須出現在匹配的文檔中。這是獲得相同結果的原因。

您可以檢查此​​

分數

每個文檔的相關性得分是由稱爲_score積極的浮點數表示。 _score越高,文檔就越相關。

查詢子句爲每個文檔生成_score

要知道分數是如何計算的,是指從Elastcisearch官方文檔此link

相關問題