python - elasticSearch批量的geo_point类型

标签 python elasticsearch bulk geopoints

大家好!
我正在尝试使用相应的python库中的bulk方法将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)
但是在这里我面临下一个错误:
'错误':{'类型':'illegal_argument_exception','原因':'映射器[位置]不能从类型[geo_point]更改为[float]'}
我还尝试将geo_point设置为"location":{"lat": 41.12,"lon": -71.34 }或字符串"location":"41.12,-71.34",但遇到一个错误,即输入数据不正确(相应地,“none”和“string”类型而不是上一条错误消息中的“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))

关于python - elasticSearch批量的geo_point类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63946125/

相关文章:

python - 使现有函数可以从类中访问

python - 通过 Selenium 中的 xpath 变量查找并执行操作 - Python

search - Elasticsearch没有给出我期望的输出

.net - 简单的批量数据持久化框架

python - 如何批量获取/放置 Yahoo 联系人

python - 如何从 finviz.com 获取和分析历史市场数据

search - 搜索时保留位置

logging - 自动日志分析和警报生成

c++ - 当 VARBINARY(MAX) 列的大小超过 8000 字节时,bcp_bind 失败

python - 解析 json 元素