1

ES クエリからの結果に問題があります。クエリをフィルタリングすると、紛らわしい結果が得られますが、それを克服する方法がわかりません。そう:

{
    "query":{
        "bool":{
            "should":[
            {
                "multi_match":
                {
                    "query":"searchquery",
                    "operator":"and",
                    "fields":["Name", "Description", "Text"]
                }
            },
            {
                "bool":{
                    "must": [
                        {"terms": {"Id": [1, 2]}},
                        {"term": {"_type": "Project"}}
                    ]
                }
            }
            ]
        }
    }
}

ここで必要なのは、名前、説明、またはテキストがクエリに一致するすべてのレコードを取得するか、ID 1 または 2 のすべてのプロジェクト (マッピングの _type) を取得することです。例: 5 件のヒット、2 件の Contact _type、1 件のプロジェクトが「searchquery」に一致し、ID が 1 または 2 の 2 件のプロジェクト。

しかし、私はいくつかの権限を持っているので、すべてのユーザーがすべてのモジュールにアクセスできるわけではありません (プロジェクトには別のフィールド、たとえば ModuleId があります)。

したがって、結果を特定の ModuleIds に制限したいと思います。

{
    "query":{
        "bool":{
            "should":[
            {
                "multi_match":
                {
                    "query":"searchquery",
                    "operator":"and",
                    "fields":["Name", "Description", "Text"]
                }
            },
            {
                "bool":{
                    "must": [
                        {"terms": {"Id": [1, 2]}},
                        {"term": {"_type": "Project"}}
                    ]
                }
            }
            ],
            "filter": [
                {"terms": {"ModuleId": [9, 5]}}
            ]
        }
    }
}

そしてブーム!その結果、上記のクエリに一致するallと、ModuleId 9 または 5 のすべての Projects を取得しました。私が望むのは、結果を広げずに絞り込むことです。should、must、filter(bool フィルターも) と多くの組み合わせを試しました。また、「魔法のように」期待される結果が得られる post_filter も試しましたが、いくつかの集計もあり (この例ではありません)、オプションではありません。

4

1 に答える 1