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

浏览:17日期:2024-04-04
(adsbygoogle = window.adsbygoogle || []).push({}); 如何解决在Elasticsearch距离脚本中访问嵌套属性?

如我的评论中所述,当您按_geo_distance排序时,返回的“_sort”字段是实际距离。因此,无需进行单独的计算。此处的详细信息:http : //elasticsearch-users.115913.n3.nabble.com/search-by-distance-and-getting-the-actual-distance-td3317140.html#a3936224

解决方法

我在elasticsearch中的索引具有以下映射:

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

源文档如下:

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

我正在尝试使用距离脚本来基于地理点计算距离。我在elasticsearch结果中发现了该帖子的Returndistance吗?帮我 我正在尝试获取所有结果,按半径1km进行过滤,获取距离,然后对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,'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]]; '

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

谢谢!

相关文章: