2017-02-07 3 views
0

ElasticSearchにいくつかのクエリを実行し、キーワードでドキュメントを取得します(コードまたは内部IDで一致させます)。私は本当にそれらのクエリのスコアリングについて気にしないで、ドキュメントを取得するだけです。スコアリングを気にしない場合は、ElasticSearchクエリでconstant_scoreの方が速いのですか?

私がconstant_scoreフィルタで使用するboolクエリをラップすると、パフォーマンスが向上するのでしょうか、それとも意味をなさないでしょうか?

答えて

1

意味がありません。 boolクエリを使用している場合は、それらにフィルタを適用できます。

GET /_search 
{ 
    "query": { 
    "bool": { 
     "must": [ 
     { "match": { "title": "Search"  }}, 
     { "match": { "content": "Elasticsearch" }} 
     ], 
     "filter": [ 
     { "term": { "status": "published" }}, 
     { "range": { "publish_date": { "gte": "2015-01-01" }}} 
     ] 
    } 
    } 
} 

フィルタ - 句(クエリ)が一致するドキュメントに表示されなければなりません。ただし、クエリのスコアを無視する必要はありません。フィルタ句はフィルタコンテキストで実行されます。つまり、スコアリングは無視され、句はキャッシュ用に考慮されます。

さらに一致する場合はconstant_scoreを使用して一致する場合は、スコアに「boost」という値を適用します。

要約する:フィルタと、彼は、あなたがまた `フィルタに` must`一部から `match`クエリを移動することができ、得点を気にしない場合は、

+1

スコア必要constant_scoreのためのフィルタを使用しますクエリはスコアリングされるので、 '部分。 – Val

+1

@Valここでは、ドキュメントからクエリをコピーして、どのように実行できるかを示しています。そしてはい、スコアリングを必要としないものはフィルタリングに行きます –

+0

@VolodymyrBilyachatパフォーマンスの観点からは、スコアリングを気にしなければ、フィルタをマッチさせる方が良いでしょうか? –

関連する問題