我的映射包含一个嵌套字段,如下所示:
"Locations": {
"type": "nested",
"properties": {
"Name": {
"type": "string"
},
"GeoPoint": {
"type": "geo_point"
}
}
}
所以基本上我要做的是在文档的每个位置存储一些额外的属性。
不幸的是,看起来这不适用于geo distance filter:
GET /myIndex/myType/_search
{
"filter": {
"geo_distance": {
"distance": "100 mi",
"Locations.GeoPoint": {
lat: 40.70,
lon: -74.00
}
}
}
}
不会返回任何结果,而如果GeoPoint直接在文档本身而不是嵌套字段上,则过滤器可以正常工作:
GET /myIndex/myType/_search
{
"filter": {
"geo_distance": {
"distance": "100 mi",
"GeoPoint": {
lat: 40.70,
lon: -74.00
}
}
}
}
有没有办法让geo distance过滤器在嵌套字段上使用geo_point?
答案 0 :(得分:4)
nested filter完成工作:
GET /myIndex/myType/_search
{
"filter" : {
"nested" : {
"path" : "Locations",
"filter" : {
"geo_distance": {
"distance": "100 mi",
"GeoPoint": {
"lat": 40.70,
"lon": -74.00
}
}
}
}
}
}
答案 1 :(得分:0)
对于ElasticSearch 5.5用户的更新,@ Max的答案已经不再使用点符号而不是显式包装"嵌套"查询周围的字段。
例如:
{
"query": {
"nested" : {
"path" : "obj1",
"score_mode" : "avg",
"query" : {
"bool" : {
"must" : [
{ "match" : {"obj1.name" : "blue"} },
{ "range" : {"obj1.count" : {"gt" : 5}} }
]
}
}
}
}
}
更多信息:https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-nested-filter.html