elasticsearch地理距离过滤器,但距离在文档上而不是在查询中

Posted

技术标签:

【中文标题】elasticsearch地理距离过滤器,但距离在文档上而不是在查询中【英文标题】:elasticserarch geo distance filter but distance is on documen instead of in the query 【发布时间】:2018-09-27 19:11:08 【问题描述】:

我有带有“xyz”的条目愿意开车到某个人的一定距离。

范围在文档上,而不是相反

我怎样才能构造一个查询来满足这个要求?

谢谢

我的记录看起来很像这样


  "name": "XYZ",
  "pin": 
"name": "Bradford",
"location": 
  "lat": 51.5,
  "lon": 0.1

  ,
  "max_travel_radius": "25km"

常规地理距离查询 会产生错误的结果,因为它与“搜索者”与条目的距离无关

条目有一个半径,“搜索者”可以到达

【问题讨论】:

请提供更多信息,说明您获取的数据格式、获取方式以及您需要的数据格式 【参考方案1】:

您需要创建具有 geo_shape 而不是位置的文档。您应该使用的 Geo_shape 是圆形,您可以在其中指定人员位置和 max_travel_distance 作为半径。请在此url 上查看圈子。您的输入文档可能看起来像


  "name": "XYZ",
  "pin": 
      "name": "Bradford",
     "location": 
        "type": circle, 
        "coordinates" : [101.0, 1.0],
        "radius" : "25000m"
      
  

接下来您应该使用geo_shape query 来检查一个点是否位于您在上面创建的文档的形状中。示例查询将类似于(您需要为嵌套查询更改它。这里仅举一个示例)

GET /example/_search

    "query":
        "bool": 
            "must": 
                "match_all": 
            ,
            "filter": 
                "geo_shape": 
                    "location": 
                        "shape": 
                            "type": "point",
                            "coordinates" : [102.0, 2.0]
                        ,
                        "relation": "contains"
                    
                
            
        
    

【讨论】:

它是“包含”而不是“内部”,但其余的都在谢谢你

以上是关于elasticsearch地理距离过滤器,但距离在文档上而不是在查询中的主要内容,如果未能解决你的问题,请参考以下文章

返回地理点数组的 Elasticsearch 距离

地理围栏的准确性是不是取决于 locationManager 的准确性或距离过滤器?

如何进行地理距离查询仅返回我尚未“喜欢”的结果、Elastic Search、Dynamo DB

elasticsearch Geo Distance Query

Elasticsearch:在 Elasticsearch 中按距离有效地对地理点进行排序

Elasticsearch:在 Elasticsearch 中按距离有效地对地理点进行排序