elasticsearch ElasticSearch没有';似乎不支持数组查找
我目前在ElasticSearch中存储了一个相当简单的文档,该文档是我通过集成测试生成的:elasticsearch ElasticSearch没有';似乎不支持数组查找,elasticsearch,nest,elasticsearch,Nest,我目前在ElasticSearch中存储了一个相当简单的文档,该文档是我通过集成测试生成的: { "took" : 1, "timed_out" : false, "_shards" : { "total" : 5, "successful" : 5, "failed" : 0 }, "hits" : { "total" : 1, "max_score" : 1.0, "hits" : [ { "_index" :
{
"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"
]
}
} ]
}
}
我想筛选字段903和值“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在索引字段时使用标准分析器。标准分析器使用小写过滤器,如示例中所述。根据我的经验,Elasticsearch会搜索数组。是的,我认为分析可能是罪魁祸首!想想这场比赛会有什么结果。如果是自由文本,则将其保留为分析字符串,并使用
匹配
查询(而不是术语
)。如果它是一个类似枚举的字段,例如:open/closed/pending…,则使用“index”:“not_analysis”
,并确保使用术语过滤器搜索确切的字符串。啊,我不知道这一点。你说得对,斯科特!谢谢你让我注意到这一点。在数组中搜索没有问题,这是另外一回事。另外,请告诉我这些不是字段名!名字应该告诉你一些关于这个领域的事情,一个新加入的开发人员怎么能理解这个呢?@ramseykhalaf:我想有人会这么说。这些字段实际上是从数据库生成的自定义字段名,因为软件用户可以自定义存储的字段。开发人员永远不会对此编写查询;查询将由软件自动生成。我想你可能会说,我们可以为字段生成一个名称,以某种方式同时包含主键和字段名,但我觉得这不是必要的,而且可能很脆弱。