在elasticsearch中,我想使用 geo_distance 过滤器查询多个索引。
问题是一个索引具有geo_point映射而另一个索引没有geo_point映射。
如果我使用纬度和经度查询,我只会获得具有geo_point映射的索引的结果。对于其他索引,我发现无法找到geo_point字段异常。
如何从两个指数中得到结果?
以下是我的查询。
{
"query":{
"filtered":{
"query":{
"bool":{
"should":{
"match_all":{
}
}
}
},
"filter":{
"bool":{
"should":[
{
"bool":{
"must":[
{
"geo_distance":{
"distance":"50km",
"location":{
"lat":22.5705741,
"lon":88.4355427
}
}
}
]
}
}
]
}
}
}
},
"sort":[
{
"_geo_distance":{
"location":{
"lat":22.5705741,
"lon":88.4355427
},
"order":"asc",
"unit":"km"
}
}
],
"size":30,
"from":0
}
我正在使用elasticsearch verion 0.90.12
答案 0 :(得分:0)
请参阅您的上一条评论,我想您可以试试这个:
{
"query": {
"filtered": {
"filter": {
"bool": {
"should": [
{
"bool": {
"must": [
{
"term": {
"_index": "index_name_with_geo_point"
},
"geo_distance": {
"from": 100,
"to": 200,
"distance_unit": "km",
"location": {
"lat": 40.73,
"lon": -74.1
}
}
}
]
}
},
{
"term": {
"_index": "Index_name_without_geo_point"
}
}
]
}
}
}
}
}
现在或
ofcorse你可以将should查询的第二个元素扩展为bool : {must : {terms : {}}}
,因为第一个元素是。{
,但只有在必要时才这样做