elasticsearch Elasticsearch嵌套过滤器,没有特定属性的结果
我正在尝试对文档应用嵌套筛选器,但是,当我专门按其中一个嵌套属性进行筛选时,总是得到0个结果。例如,使用以下映射:elasticsearch Elasticsearch嵌套过滤器,没有特定属性的结果,elasticsearch,elasticsearch,我正在尝试对文档应用嵌套筛选器,但是,当我专门按其中一个嵌套属性进行筛选时,总是得到0个结果。例如,使用以下映射: "PARTNER": { "properties": { "Addresses": { "properties": { "CountyCode": { "type": "string" },
"PARTNER": {
"properties": {
"Addresses": {
"properties": {
"CountyCode": {
"type": "string"
},
"EntityCode": {
"type": "string"
}, [...]
}
}, "type": "nested"
}, [...]
}
我可以对CountyCode属性执行筛选,但如果我对EntityCode进行筛选,我总是得到零结果:
{
"from": 0,
"size": 10,
"query": {
"filtered": {
"query": {
"bool": {
"must": {
"match_all": {}
}
}
},
"filter": {
"nested": {
"filter": {
"term": {
"EntityCode": "201"
}
},
"path": "Addresses"
}
}
}
}
}
该查询得到的结果为零,如果我用CountyCode替换字段,它会给出正确的结果。
我正在ES 1.4.2上的基于web的控制台上执行查询
嵌套文档的格式为:
{
"CountyCode": "516",
"EntityCode": "203",
[...]
}
知道为什么一个字段什么都不返回吗
谢谢 看起来您的“类型”:“嵌套的”
声明位于错误的位置。它应该在“Addresses”
块中。您可能还需要在“nested”
过滤器中指定完整路径(尽管有时候ES足够聪明,如果嵌套字段不太多的话,可以不这样做)
为了测试,我创建了如下索引:
PUT /test_index
{
"settings": {
"number_of_shards": 1
},
"mappings": {
"PARTNER": {
"properties": {
"Addresses": {
"type": "nested",
"properties": {
"CountyCode": {
"type": "string"
},
"EntityCode": {
"type": "string"
}
}
}
}
}
}
}
然后添加了几个文档:
POST /test_index/PARTNER/_bulk
{"index":{"_id":1}}
{"Addresses":[{"CountyCode": "516","EntityCode": "203"}, {"CountyCode": "516","EntityCode": "201"}]}
{"index":{"_id":2}}
{"Addresses":[{"CountyCode": "517","EntityCode": "204"}]}
现在,下面的查询将返回我所期望的结果:
POST /test_index/_search
{
"from": 0,
"size": 10,
"query": {
"filtered": {
"query": {
"match_all": {}
},
"filter": {
"nested": {
"path": "Addresses",
"filter": {
"term": {
"Addresses.EntityCode": "201"
}
}
}
}
}
}
}
...
{
"took": 1,
"timed_out": false,
"_shards": {
"total": 1,
"successful": 1,
"failed": 0
},
"hits": {
"total": 1,
"max_score": 1,
"hits": [
{
"_index": "test_index",
"_type": "PARTNER",
"_id": "1",
"_score": 1,
"_source": {
"Addresses": [
{
"CountyCode": "516",
"EntityCode": "203"
},
{
"CountyCode": "516",
"EntityCode": "201"
}
]
}
}
]
}
}
以下是我用来测试的所有代码:
你好,斯隆。映射是“手工制作”的,只是为了简化问题,嵌套类型定义实际上是地址的一个属性。无论如何,我缺少的是实际过滤器上的完整路径(我在不同的嵌套过滤器上有另一个EntityCode,但没有其他CountyCode,所以这应该是行为不同的原因)。非常感谢。