2016-12-20 3 views
1

ElasticSearch Query DSLのクエリコンテキストとフィルタコンテキストとちょっと混乱します。私は以下の2つのクエリを持っています。どちらのクエリも同じ結果を返します。最初の評価スコアと2番目のスコアは一致しません。どちらが適切ですか?弾性検索クエリコンテキストとフィルタコンテキスト

第一クエリ: -

curl -XGET 'localhost:9200/xxx/yyy/_search?pretty' -d' 
{ 
    "query": { 
    "bool": { 
     "must": { 
     "terms": { "mcc" : ["5045","5499"]} 
     }, 
     "must_not":{ 
     "term":{"maximum_flag":false} 
     },       
     "filter": { 
     "geo_distance": { 
      "distance": "500", 
      "location": "40.959334, 29.082142" 
     }         
     } 
    } 
    } 
}' 

第二問合せ: -

curl -XGET 'localhost:9200/xxx/yyy/_search?pretty' -d' 
{ 
    "query": { 
    "bool" : { 
     "filter": [ 
     {"term":{"maximum_flag":true}}, 
     {"terms": { "mcc" : ["5045","5499"]}} 
     ], 
     "filter": { 
     "geo_distance": { 
      "distance": "500", 
      "location": "40.959334, 29.082142" 
     }         
     } 
    } 
    } 
}' 

おかげで、あなたは良い説明を持っている公式ガイドで

+0

この[SO](http://stackoverflow.com/questions/14595988/queries-vs-filters)は役に立ちます。 – Kulasangar

答えて

0

クエリ文脈

クエリコンテキストで使用されるクエリ句は、「このドキュメントがこのクエリ句にどの程度適しているか」という質問に答えます。ドキュメントが一致するかどうかを判断するだけでなく、クエリ句はドキュメントの一致度合いを表す_scoreも計算し、他の文書と比較して

クエリコンテキストは、検索APIのクエリパラメータなどのクエリパラメータに渡されるたびに有効です。フィルタの文脈では

フィルターコンテキスト

は、クエリ句が質問に答える「このクエリ句この文書の試合をしていますか?」答えは簡単なYesまたはNoではありません - 何のスコアが計算されていません。フィルタコンテキストは、主に構造化データのフィルタリングに使用されます。

このタイムスタンプは2015〜2016の範囲に入りますか? ステータスフィールドは「公開済み」に設定されていますか? 頻繁に使用されるフィルタは、パフォーマンスをスピードアップするために、Elasticsearchによって自動的にキャッシュされます。

フィルタコンテキストは、boolクエリのfilterまたはmust_notパラメータ、constant_scoreクエリのフィルタパラメータ、またはフィルタ集計などのフィルタパラメータにクエリ句が渡されるたびに有効です。あなたのケースについて

https://www.elastic.co/guide/en/elasticsearch/reference/2.3/query-filter-context.html

、我々はより多くの情報が必要だろうが、あなたは正確な値を探している考慮に入れてすることは、フィルタは、より良い、それに合うでしょう。