使用 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 返回太远的项目的主要内容,如果未能解决你的问题,请参考以下文章

资讯Elas推出比特币企业套件Signavera

Elasticsearch 安装

探索Elasticsearch集群API

elk+redis+filebeat

elasticsearch基本使用

ES 搜索引擎