elasticsearch bulk的geo\u点类型

8fsztsew  于 2021-06-14  发布在  ElasticSearch
关注(0)|答案(1)|浏览(457)

大家好!
我正在尝试使用相应python库中的bulk方法将geo_点数据放入elasticsearch。因此,我定义并成功上载了下一个Map方案(我检查了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”:“非法参数\u exception”,“reason”:“mapper[location]不能从类型[geo\u point]更改为[float]”
我也试着把geoèu point "location":{"lat": 41.12,"lon": -71.34 } 或作为字符串 "location":"41.12,-71.34" 我得到一个错误,输入数据不正确(“none”和“string”类型对应,而不是前面错误消息中的“to[float]”)。
我发现我的输入数据格式有问题,但不知道如何正确使用。请告知我应该如何重新格式化输入数据格式。
提前谢谢!
p、 对于所有其他数据类型,这个上传脚本工作正常

6fe3ivhb

6fe3ivhb1#

那里有很多不一致的地方,尤其是数据列表。下面是一个适用于您的用例的工作脚本:

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))

相关问题