我目前有一个存储在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 docs表示字符串或数组映射之间没有区别,所以我不认为我需要在此处进行任何更改。
答案 0 :(得分:5)
尝试搜索“打开”而不是“打开”。默认情况下,Elasticsearch在索引字段时使用标准分析器。标准分析器使用小写过滤器,如示例here中所述。根据我的经验,Elasticsearch会搜索数组。