带有geo_distance过滤器的ElasticSearch MapperParsingExceptionn

摄氏爵士

grails elasticsearch在应用程序中使用了插件,但遇到了一个奇怪的异常。

我有一种方法可以使用geo_distance过滤器建立请求

def activityList = ElasticSearchService.search(
            [types:[DomainA, DomainB],
            sort: orderBy, order: orderAs, size: (int)maxRes],
                {
                    // bla bla bla some working closure building a working query

                    }

                    if(centerLat != -1){
                        filter{
                            geo_distance(
                                'distance': searchRadius,
                                'activityLocation': [lat: (Double)centerLat, lon: (Double)centerLon]
                                )
                        }
                    }
                }
            )

每当我尝试使用带有过滤器的方法(也就是,当我例如设置searchRadius'5km'centerLat/centerLon到正确的坐标,我的ElasticSearch节点就会发疯,并保持记录以下错误,直到我将它关闭:

| Error 2014-08-27 10:31:49,076 [elasticsearch[Agent Zero][bulk][T#2]] ERROR index.IndexRequestQueue  - Failed bulk item: MapperParsingException[failed to parse]; nested: ElasticsearchParseException[field must be either 'lat', 'lon' or 'geohash']; 

由于这种原因,我尝试在网上查看MappingParserException,最终查看该类源代码org.elasticsearch.common.geo.GeoUtils显然,抛出异常是因为mylatlonfield不是数字(请参见372381)。

为什么会这样呢?我是否声明过滤器错误?

摄氏爵士

已经有一段时间了,这个问题让我有些不安,但是我终于解决了。

我以这种方式映射了以下类:

class A{

static searchable={
    activityLocation geoPoint:true, component:true
    // some other mappings on some other fields
}

Location activityLocation

// some other fields

}
a
class Location{
    static searchable = true

    String locationName

    Double lat

    Double lon
}

有两个问题:

  1. 我不想root false在映射activityLocation对象使用该选项,因为我希望能够直接搜索它们,这导致我的A对象包含以下属性(请注意id字段的存在):

    'activityLocation' : { 'id':'1', 'locationName' : 'foo', 'lat': '42.5464', 'lon': '65.5647' }

这不是一个geoPoint原因,因为它不仅具有latandlon域。

  1. 我将locationName属性映射activityLocation对象的一部分,这使它们不是 geoPoints。

我最终通过将映射更改为以下值来解决了这个问题activityLocation

ActivityLocation{
    static searchable = {
        only = ['lat', 'lon']
        root false
    }

    String locationName

    Double lat

    Double lon
}

这解决了我的问题,从那时起我的搜索进行得很顺利。

我还必须补充一点,我对此感到非常困惑,因为我无法为地图映射geoPoint更多属性而感到失望我希望可以在映射中包含其他字段。

此外,我希望插件能使我更好地访问ES日志,花了我一段时间才弄清楚在哪里查找错误代码。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在Elasticsearch中过滤geo_distance

来自分类Dev

带有多个过滤器的ElasticSearch

来自分类Dev

ElasticSearch 5.1 带有多重过滤器的过滤查询

来自分类Dev

带有范围和存在过滤器的Elasticsearch

来自分类Dev

带有过滤器Elasticsearch的功能评分

来自分类Dev

带有多个值的Elasticsearch术语过滤器

来自分类Dev

带有范围和存在过滤器的Elasticsearch

来自分类Dev

带有多个过滤器的Elasticsearch搜索查询

来自分类Dev

带有列表的Django过滤器过滤器

来自分类Dev

ElasticSearch-带有过滤器的自定义分析器-未应用过滤器

来自分类Dev

如何在NEST for Elasticsearch中按_geo_distance排序?

来自分类Dev

在Elasticsearch中使用聚合搜索geo_distance

来自分类Dev

带有过滤器的GetPivotData

来自分类Dev

带有过滤器的mdChips

来自分类Dev

带有lodash的过滤器数组

来自分类Dev

带有 manytomanyfield 的 Django 过滤器

来自分类Dev

带有过滤器的ElasticSearch function_score查询

来自分类Dev

带有query_string的ElasticSearch 2.0 Java API聚合过滤器

来自分类Dev

带有嵌套过滤器的Elasticsearch-dsl以及完全匹配的AND和OR条件

来自分类Dev

带过滤器的ElasticSearch bool查询不适用于带有“-”的字段

来自分类Dev

在ElasticSearch中使用不带映射的带有斜杠的值的术语过滤器

来自分类Dev

PHP Elasticsearch,带有过滤器的布尔查询未获得任何结果

来自分类Dev

ElasticSearch 6 中带有过滤器的嵌套对象的聚合

来自分类Dev

带有多个过滤器的过滤表

来自分类Dev

带有多个过滤器的过滤表

来自分类Dev

带有RecyclerView过滤的SearchView过滤器,结果错误

来自分类Dev

Elasticsearch geo_bounding_box过滤器返回0个结果

来自分类Dev

带有搜索输入的jQuery Json过滤器,无需使用任何过滤器插件

来自分类Dev

带有排除选项的 angularjs 过滤器('过滤器')

Related 相关文章

  1. 1

    在Elasticsearch中过滤geo_distance

  2. 2

    带有多个过滤器的ElasticSearch

  3. 3

    ElasticSearch 5.1 带有多重过滤器的过滤查询

  4. 4

    带有范围和存在过滤器的Elasticsearch

  5. 5

    带有过滤器Elasticsearch的功能评分

  6. 6

    带有多个值的Elasticsearch术语过滤器

  7. 7

    带有范围和存在过滤器的Elasticsearch

  8. 8

    带有多个过滤器的Elasticsearch搜索查询

  9. 9

    带有列表的Django过滤器过滤器

  10. 10

    ElasticSearch-带有过滤器的自定义分析器-未应用过滤器

  11. 11

    如何在NEST for Elasticsearch中按_geo_distance排序?

  12. 12

    在Elasticsearch中使用聚合搜索geo_distance

  13. 13

    带有过滤器的GetPivotData

  14. 14

    带有过滤器的mdChips

  15. 15

    带有lodash的过滤器数组

  16. 16

    带有 manytomanyfield 的 Django 过滤器

  17. 17

    带有过滤器的ElasticSearch function_score查询

  18. 18

    带有query_string的ElasticSearch 2.0 Java API聚合过滤器

  19. 19

    带有嵌套过滤器的Elasticsearch-dsl以及完全匹配的AND和OR条件

  20. 20

    带过滤器的ElasticSearch bool查询不适用于带有“-”的字段

  21. 21

    在ElasticSearch中使用不带映射的带有斜杠的值的术语过滤器

  22. 22

    PHP Elasticsearch,带有过滤器的布尔查询未获得任何结果

  23. 23

    ElasticSearch 6 中带有过滤器的嵌套对象的聚合

  24. 24

    带有多个过滤器的过滤表

  25. 25

    带有多个过滤器的过滤表

  26. 26

    带有RecyclerView过滤的SearchView过滤器,结果错误

  27. 27

    Elasticsearch geo_bounding_box过滤器返回0个结果

  28. 28

    带有搜索输入的jQuery Json过滤器,无需使用任何过滤器插件

  29. 29

    带有排除选项的 angularjs 过滤器('过滤器')

热门标签

归档