1. ホーム
  2. elasticsearch

[解決済み] ElasticSearchとマルチフィルター

2022-02-10 14:08:43

質問

すべてのユーザードキュメントを検索するクエリを作成しようとしています。 (docType = user) そして、多くのフィルタに基づいてそれらをフィルタリングします。例えば、場所、性別、年齢などです。フィルターは、私が構築している検索機能へのユーザーの入力に基づいて追加/削除されます。

以下は、結果を返しません。

{
    "query": {
        "filtered": {
            "query": {
                "match_all": {}
                },
                "filter": {
                    "and": {
                        "filters": 
                        [
                            {
                                "term": {
                                    "doc.docType": "user"
                                }
                            },
                            {
                                "term": {
                                    "doc.data.profile.location" : "CA"
                                }
                            }
                        ]
                    }
                }
        }
    }
}

以下はリターン結果です。

{
    "query": {
        "filtered": {
            "query": {
                "field": {
                    "doc.data.profile.location" : "CA"
                }
                },
                "filter": {
                    "and": {
                        "filters": 
                        [
                            {
                                "term": {
                                    "doc.docType": "user"
                                }
                            }
                        ]
                    }
                }
        }
    }
}

後者は、結果は返ってくるものの、長期的にはうまくいきません。年齢や性別などの追加のフィルターを入れたい場合がありますが、複数のフィールドを追加することはできないようです。 最初のクエリは、場所に関するフィルタを削除すると動作します。

解決方法は?

ブールフィルタ を使用すると、複数の MUST , SHOULDSHOULD_NOT というリクエストを一緒にしています。これを1つのクエリにまとめることができます。