1. ホーム
  2. elasticsearch

[解決済み] elasticsearchのQuery DSLにおけるmustとfilterの違いは何ですか?

2023-02-14 10:18:33

質問

エラスティックサーチの初心者なのですが、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を使えばいいのでしょうか?その違いは何ですか?

どのように解決するのですか?

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

の両方において mustfilter のように、一致する文書に句(クエリ)が出現していなければなりません。これが同じ結果を得るための理由です。

あなたはこれを確認することができます リンク

<ブロッククオート

スコア

各文書の関連性スコアは、正の浮動小数点数である _score . が高いほど _score が高いほど、より関連性の高いドキュメントとなります。

クエリ句が生成する _score を生成します。

スコアの計算方法については、以下を参照してください。 リンク