使用 geo_distance 过滤器时,ElasticSearch 返回太远的项目
Posted
技术标签:
【中文标题】使用 geo_distance 过滤器时,ElasticSearch 返回太远的项目【英文标题】:ElasticSearch returns items that are too far away when using a geo_distance filter 【发布时间】:2011-12-25 19:40:58 【问题描述】:当我使用 nested filter -> and -> geo_distance
搜索我的 ElasticSearch 文档时,我检索到的文档太远了(我不想返回)。您可以看到 query 和下面的结果截图(原始结果左侧和右侧手动过滤的结果)。
这是查询的另一个副本:
"query":
"match_all":
,
"filter":
"and":[
"term":
"PropertySubType":"Single Family"
,
"term":
"City":"Los Angeles"
,
"geo_distance":
"distance":"2.25miles",
"Location":[
34.111583657,
-118.324646099
]
,
"range":
"BedroomsTotal":
"gte":3
,
"range":
"BuildingSize":
"gte":3000
,
"range":
"YearBuilt":
"lte":2000
,
"terms":
"ListingStatus":[
"Active",
"Pending",
"Closed"
]
]
,
"size":100
【问题讨论】:
我认为问题出在 ES 之外的某个地方。 ES 不应为您的查询返回任何结果,因为 1) 位置必须采用 [lon, lat] 格式(-118 的纬度不存在)和 2) 除非您更改索引映射,"PropertySubType":"Single Family " 不应该匹配任何记录。您使用的是 PropertySubType 的标准分析器,因此该字段不应包含术语“Single Family”(它应该包含两个术语:“single”和“family”)。顺便说一句,如果您提供一个可以重现您的问题的脚本,例如gist.github.com/1097105,那么帮助您会容易得多 感谢 imotov,原来我需要使用“plane”而不是“arc”。我也一直在更新索引的映射,以便某些字段是 mutli_fields,这些字段是经过分析和未分析的(例如“PropertySubType”) 【参考方案1】:添加选项“distance_type”并将其设置为“plane”修复了这个问题。在此处查看“distance_type”:
http://www.elasticsearch.org/guide/reference/query-dsl/geo-distance-filter.html
【讨论】:
上述链接的文档说plane
距离类型更快,但精度较低。我想知道为什么使用plane
距离类型可以得到更好的距离计算。以上是关于使用 geo_distance 过滤器时,ElasticSearch 返回太远的项目的主要内容,如果未能解决你的问题,请参考以下文章