访问Elasticsearch距离脚本中的嵌套属性



我在弹性搜索中的索引有以下映射:

"couchbaseDocument": {
      "properties": {
         "doc": {
            "properties": {
               "properties": {
                  "properties": {
                     "location": {
                        "type": "geo_point"

源文件如下:

{"properties" : {"location":"43.706596,-79.4030464"}}

我正在尝试使用距离脚本来计算基于地理点的距离。我在弹性搜索结果中找到了这个帖子返回距离?来帮我。我正在尝试获取所有结果,按半径1公里进行过滤,获取距离,并在geo_point上排序。查询构造如下:

{
    "query": {
        "match_all": {}
    },
    "filter": {
        "geo_distance": {
           "distance": "1km",
           "doc.properties.location": {
              "lat": 43.710323,
              "lon": -79.395284
           }
        }
    },
    "script_fields": {
       "distancePLANE": {
            "params": {
               "lat": 43.710323,
               "lon": -79.395284
           }, 
          "script": "doc[properties]['location'].distanceInKm(lat, lon)"
       }, 
       "distanceARC" :{
           "params": {
               "lat": 43.710323,
               "lon": -79.395284
           }, 
           "script": "doc[properties]['location'].arcDistanceInKm(lat,lon)"
       }
    }, 
    "sort": [
       {
           "_geo_distance":{
               "doc.properties.location": [-79.395284,43.710323],
                "order": "desc",
                "unit": "km"
           }
       }
    ],
    "track_scores": true
}

我收到以下状态为500的错误:

"PropertyAccessException[[Error: could not access: properties; in class: org.elasticsearch.search.lookup.DocLookup]n[Near : {... doc[properties]['location'].distan ....}]n                 ^n[Line: 1, Column: 5]]"

我试着用这种方式重写查询:

..."script": "doc['properties']['location'].arcDistanceInKm(lat,lon)"...

然后我得到这个错误:

"CompileException[[Error: No field found for [properties] in mapping with types [couchbaseDocument]]n[Near : {... doc['properties']['location']. ....}]n             ^n[Line: 1, Column: 1]]; nested: ElasticSearchIllegalArgumentException[No field found for [properties] in mapping with types [couchbaseDocument]]; "

当我一起从查询中删除脚本部分时,排序和过滤工作非常好。使用脚本时,是否有不同的方法访问嵌套字段?任何见解都将不胜感激!

谢谢!

设法用完成

"script" : "doc.last_location.distance(41.12, -71.34)"

不知道为什么,但doc['last_location']似乎根本不起作用!

正如我在评论中提到的,当您按_geo_distance排序时,返回的"_sort"字段是实际距离。因此,没有必要进行单独的计算。此处提供详细信息:http://elasticsearch-users.115913.n3.nabble.com/search-by-distance-and-getting-the-actual-distance-td3317140.html#a3936224

最新更新