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 も試しましたが、いくつかの集計もあり (この例ではありません)、オプションではありません。