【问题标题】:elasticsearch mapping of geo_point with null_value具有 null_value 的 geo_point 的弹性搜索映射
【发布时间】:2018-12-11 20:54:28
【问题描述】:

我在从数据库导入时遇到了与 elasticsearch 的 geo_point 相关的问题。 如果 lonlat 字段的值包含实际值,我的映射效果很好。

现在可能会发生某些行包含 lon/lat空值,如果我尝试导入这些,我会得到一个 ElasticsearchParseException[latitude must be a number] 完全看起来合法的错误。

所以我想将这些字段设置为 0,0 或 NULL,NULL,但这是我卡住的地方。

我尝试将 'null_value' => '0' 添加到映射中,但这似乎不起作用。

这是映射的样子:

'_source' => array(
            'enabled' => true
        ),
        'properties' => array(
            'coordinates' => array(
                'type' => 'geo_point',
                'null_value' => '0'
            )
        )

有人知道吗?

(我正在使用 PHP Elasticsearch 客户端。)

【问题讨论】:

标签: elasticsearch null mapping geospatial


【解决方案1】:

FWIW 这是您的文档结构的问题,而不是空值的存在。

如果您有一个映射类型为geo_point 的字段coordinates,则必须使用{..., coordinates: null} 而不是{..., coordinates: {lat: null, lon: null}} 或类似的equivalent formats 插入文档。必须丢失整个字段,而不是其内部数据。

【讨论】:

    【解决方案2】:

    找到了一个适合我但不能解决实际问题的解决方案。

    在我的数据库查询中,我使用 Posgresql 中的 COALESCE 将 null 转换为 0,这类似于 mysql 中的 IFNULL。

    【讨论】:

    • 这通常是个坏主意,因为 0 是纬度和经度的实际值。缺失值应该以明确的方式表现。如果您这样做,您应该将字段的null_value 设置为0,因此它可以安全地假设零与缺失相同。这样做有可能会错误地将某些坐标视为空值。
    猜你喜欢
    • 1970-01-01
    • 2023-04-03
    • 1970-01-01
    • 2014-08-26
    • 1970-01-01
    • 1970-01-01
    • 2016-07-03
    • 2016-06-20
    • 1970-01-01
    相关资源
    最近更新 更多