Elasticsearch geo_distance过滤多个索引

时间:2016-12-07 16:33:23

标签: elasticsearch

在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

1 个答案:

答案 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"
                 }
              }
           ]
        }
     }
  }
 }
}

现在或

  • ducument必须来自具有地理位置和地理范围的索引
  • 该文档不是来自具有地理位置的索引。

ofcorse你可以将should查询的第二个元素扩展为bool : {must : {terms : {}}},因为第一个元素是。{  ,但只有在必要时才这样做