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地理距离过滤器,但距离在文档上而不是在查询中的主要内容,如果未能解决你的问题,请参考以下文章
地理围栏的准确性是不是取决于 locationManager 的准确性或距离过滤器?
如何进行地理距离查询仅返回我尚未“喜欢”的结果、Elastic Search、Dynamo DB
elasticsearch Geo Distance Query