web-dev-qa-db-ja.com

Elasticsearch:constant_scoreクエリとbool.filterクエリ

Elasticsearchを使用して完全一致の結果を達成しようとしています(したがって、ここでのスコアリングは気にしません)

これを行うには2つの方法があることがわかります:

{
    "query" : {
        "constant_score" : {
            "filter" : {
                "term" : {
                    "exact_match_field" : "hello world !"
                }
            }
        }
    }
}

または

{
  "query": {
    "bool": {
      "filter": {
        "term": {
          "exact_match_field": "hello world !"
        }
      }
    }
  }
}

両方とも機能し、私が望む結果を与えてくれます。それらの違いは何ですか?一方を使用することと他方を使用することのパフォーマンス上の利点はありますか?

(Elasticsearch V 5.6を使用しています)

ありがとう!

7
sharath

一定スコアクエリは、TF, IDFなどのスコアリング係数に関係なく、一致するドキュメントに等しいスコアを与えます。これは、ドキュメントがどれだけ一致したかを気にせず、ドキュメントが一致したかどうかに関係なく、与えることができます。フィルタとは異なり、スコアも。

Constant_scoreクエリは、他のクエリと組み合わせたときに返されるすべてのドキュメントのスコアとして設定されるブースト引数を取ります。デフォルトでは、ブーストは1に設定されています。

以下のリンクに興味がある場合は、より多くの洞察が得られます

https://www.compose.com/articles/elasticsearch-query-time-strategies-and-techniques-for-relevance-part-ii/

5
Sunder R