私は、配列フィールドにネストされたブールフィールドと文字列フィールドのクエリに関する非常に特別な問題があります。インデックスマッピングは以下の通りである:配列フィールドのBoolクエリ
indexes :string_field_1, type: 'string'
indexes :string_field_2, type: 'string'
indexes :boolean_field_1, type: 'boolean'
indexes :array_field_1 do
indexes :boolean_field_2, type: 'boolean'
indexes :string_field_3, type: 'string'
end
indexes :array_field_2 do
indexes :integer_field_1, type: 'integer'
end
indexes :array_field_3 do
indexes :integer_field_2, type: 'integer'
end
文書指数も配列フィールドにネストされていない他の多くの分野がありますが、クエリフィールドの中に含まれる必要があります。 私は以下の通りであるフィルタとブールクエリを使用してのアプローチを試してみました:
"query":
{"bool":
{"must":
[
{"query_string":
{"query":"text which is being searched",
"fields":[
"string_field_1",
"string_field_2",
"array_field_1.string_field_3"
],
"fuzziness":"1","analyze_wildcard":true,"auto_generate_phrase_queries":false,"analyzer":"brazilian","default_operator":"AND"}
}
],
"filter":[
{"bool":
{"must":
[
{"bool":
{"should":
[
{"term":{"boolean_field_1":false}},
{"terms":{"array_field_2.integer_field_1":[x,z]}},
{"term":{"array_field_3.integer_field_2":y}}]}},
{"bool":
{"should":
[
{"term":{"array_field_1.boolean_field_2":true}},
{"terms":{"array_field_2.integer_field_1":[x,z]}},
{"term":{"array_field_3.integer_field_2":y}}]}},
]
}
}
]
}
}
]
}
}
このクエリでの問題は、それが私の意見では、返される必要はありません、ドキュメントを返しているということです。 文書は、この場合には、怒鳴るです:偽も検索されているテキスト:
_source": {
"string_field_1": "text 1",
"string_field_2": "text 2",
"boolean_field_1": false,
"array_field_1": [
{
"boolean_field_2": true,
"string_field_3": "some text which is not being searched"
},
{
"boolean_field_2": true,
"string_field_3": "some text which is not being searched"
},
{
"boolean_field_2": false,
"string_field_3": "text which is being searched"
},
{
"boolean_field_2": true,
"string_field_3": "some text which is not being searched"
}
],
"array_field_2": [
{
"integer_field_1": A
}
],
"array_field_3": [
{
"integer_field_2": B
}
]
}
あなたはお気づきのように、array_field_1の3番目の項目はboolean_field_2が含まれています。しかし、私のfilter:節によると、array_field_1.boolean_field_2が真であるドキュメントだけが検索されなければなりません。なぜなら、array_field_2.integer_field_1:またはarray_field_3.integer_field_1が発生しない限り、これは真ではありません。 論理的には、array_field_1 [2]がboolean_field_2がfalseであるとは考えていないようです。 このドキュメントが取得されないようにクエリを作成するにはどうすればよいですか?
おかげで別のアプローチは、ブール型のフィールドに関連するブールクエリと一緒にarray_field_1.string_field_3クエリを置くことで構成され、 ギリェルメ