elasticsearch,pyes,Python,elasticsearch,Pyes" /> elasticsearch,pyes,Python,elasticsearch,Pyes" />

Python 弹性搜索大地距离查询

Python 弹性搜索大地距离查询,python,elasticsearch,pyes,Python,elasticsearch,Pyes,我在python中使用地理距离查询,如下所示 { "query": { "filtered": { "query": { "match_all": {} }, "filter": { "geo_distance": { "distance": "20miles", "location": { "lat": 51.512497, "

我在python中使用地理距离查询,如下所示

{
  "query": {
    "filtered": {
      "query": {
        "match_all": {}
      },
      "filter": {
        "geo_distance": {
          "distance": "20miles",
          "location": {
            "lat": 51.512497,
            "lon": -0.052098
          }
        }
      }
    }
  }
} 

它工作正常。我的问题是如何给文档中的“距离”赋值。我在索引中为每条记录设置了一个类似于
距离:50
的字段,我想将其用作大地距离中的距离值。我尝试了
“distance”:doc['distance']。value
但不起作用。

普通查询和筛选器不希望脚本放在其中

假设您存储了一个
地理点
,其字段名为
位置
,则您希望使用(与
距离(纬度,经度)
相反,因为自
v1.0
起,标准单位为
):

注意:您可以在脚本中直接提供
lat
lon
的值,以便一次性执行,但是脚本是编译和缓存的,因此使用参数允许重用,因此第一次使用后执行速度更快


如文档中所述,您可以通过向筛选器中添加
“_cache”:true来缓存筛选器的结果,但默认情况下不会缓存筛选器的结果。

我尝试过,但得到以下错误“查询[filtered(ConstantCore)(ScriptFilter(doc['location'].distanceInMiles(lat,lon))->缓存(_type:users schema)],来自[0],size[10]:查询失败[未能执行主查询]];嵌套:PropertyAccessException[[错误:无法解析方法:org.elasticsearch.index.fielddata.ScriptDocValues$GeoPoints.distanceInMiles(java.lang.Double,java.lang.Double)[arglength=2][近:{…doc location'].distanceInMile..]^[行:1,列:1];]您使用的Elasticsearch版本是什么?该方法已添加到。幸运的是,在1.0之前,默认单位已经是
miles
(与
meters
)了,因此您可以将方法从
distance inmiles(lat,lon)
更改为
distance(lat,lon)
,并且应该可以使用相同的方法。
{
  "filtered" : {
    "query" : { "match_all" : { } },
    "filter" : {
      "script" : {
        "script" :
          "doc['location'].distanceInMiles(lat, lon) < doc['distance'].value",
        "params" : {
          "lat" : 51.512497,
          "lon" : -0.052098
        }
      }
    }
  }
}
{
  "filtered" : {
    "query" : { "match_all" : { } },
    "filter" : {
      "script" : {
        "script" :
          "doc['location'].distance(lat, lon) < doc['distance'].value",
        "params" : {
          "lat" : 51.512497,
          "lon" : -0.052098
        }
      }
    }
  }
}