web-dev-qa-db-ja.com

elasticsearchのQuery DSLのmustとfilterの違いは何ですか?

弾性検索は初めてで、mustとfilterの間で混乱しています。私は用語の間にand操作を実行したいので、これをしました

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"
                }
            }
        }
    }
}

同じ結果が得られるので、いつmustを使用する必要があり、いつfilterを使用する必要がありますか?違いはなんですか?

40
Krash

mustはスコアに寄与します。 filterでは、クエリのスコアは無視されます。

mustfilterの両方で、句(クエリ)が一致するドキュメントに出現する必要があります。これが同じ結果を得る理由です。

これを確認できます link

スコア

各ドキュメントの関連性スコアは、_scoreと呼ばれる正の浮動小数点数で表されます。 _scoreが高いほど、ドキュメントの関連性が高くなります。

クエリ句は、ドキュメントごとに_scoreを生成します。

スコアの計算方法を知るには、これを参照してください link

46
Vijay Gupta