geo_point elasticSearch 批量输入

geo_point type for elasticSearch bulk

大家好!

我正在尝试使用相应 python 库中的批量方法将 geo_point 数据放入 elasticSearch。 所以我定义并成功上传了下一个映射方案(我检查了该方案在 Kibana UI 中设置正确):

 {'mappings': {
            'properties': {
                           'location': {'type': 'geo_point'}
                           }
        }
 }

然后我尝试将数据放入下一个代码中(我阅读了 ES 手册并阅读了此处的示例 https://www.elastic.co/guide/en/elasticsearch/reference/current/geo-point.html):

from elasticsearch import Elasticsearch
data = [{"index": {"_index": "geo_index", "_type": "geo_type"}}, {"location": (41.12, -71.34)}]

elasetic_search_instance = Elasticsearch(....)
elasetic_search_instance.bulk(data)

但在这里我遇到了下一个错误: 'error':{'type':'illegal_argument_exception','reason':'mapper [location] cannot be changed from type [geo_point] to [float]'}

我还尝试将 geo_point 设为 "location":{"lat": 41.12,"lon": -71.34 } 或字符串 "location":"41.12,-71.34",但出现输入数据不正确的错误(“none”和“字符串" 相应地键入而不是先前错误消息中的“to [float]”。

我发现输入数据格式有误,但无法理解如何正确操作。 请告知我应该如何重新格式化输入数据格式。

提前致谢!

P.S> 对于所有其他数据类型,此上传脚本工作正常

那里有很多不一致之处,尤其是数据列表。这是您的用例的工作脚本:

from elasticsearch import Elasticsearch
from elasticsearch.helpers import bulk

es_instance = Elasticsearch()

es_instance.indices.create('geo_index',
                           ignore=400,
                           body={
                               'mappings': {
                                   'properties': {
                                       'location': {
                                           'type': 'geo_point'
                                       }
                                   }
                               }
                           })

data = [
    {"location": (41.12, -71.34)}
]

actions = [
    {
        "_index": "geo_index",
        "_source": point
    } for point in data
]

success_count, errors = bulk(es_instance, actions)

print((success_count, errors))