現在、統合テストで生成した非常に単純なドキュメントを ElasticSearch に保存しています。
{
"took" : 1,
"timed_out" : false,
"_shards" : {
"total" : 5,
"successful" : 5,
"failed" : 0
},
"hits" : {
"total" : 1,
"max_score" : 1.0,
"hits" : [ {
"_index" : "unit-test_project600",
"_type" : "recordDefinition505",
"_id" : "400",
"_score" : 1.0, "_source" : {
"field900": "test string",
"field901": "500",
"field902": "2050-01-01T00:00:00",
"field903": [
"Open"
]
}
} ]
}
}
特に field903 と "Open" の値をフィルター処理したいので、次のクエリを実行します。
{
query: {
filtered: {
filter: {
term: {
field903: "Open",
}
}
}
}
}
これは結果を返しません。ただし、これを他のフィールドで使用すると、次のレコードが返されます。
{
query: {
filtered: {
filter: {
term: {
field901: "500",
}
}
}
}
}
ElasticSearch を使用して配列を検索できないようです。私は似たような問題を抱えている人々の例をいくつか読んだことがありますが、誰もそれを解決していないようです. 確かに、これは ElasticSearch の制限ではありませんか?
マッピングの問題かもしれないと思いました。これが私のマッピングです:
{
"unit-test_project600" : {
"recordDefinition505" : {
"properties" : {
"field900" : {
"type" : "string"
},
"field901" : {
"type" : "string"
},
"field902" : {
"type" : "date",
"format" : "dateOptionalTime"
},
"field903" : {
"type" : "string"
}
}
}
}
}
ただし、ElasticSearch のドキュメントでは、文字列マッピングと配列マッピングに違いはないことが示されているため、ここで変更を加える必要はないと思います。