我目前在 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 文档表明字符串或数组映射之间没有区别,因此我认为我不需要在此处进行任何更改。