【问题标题】:How to index in elasticsearch using post request in Python?如何在 Python 中使用 post 请求在 elasticsearch 中建立索引?
【发布时间】:2019-05-02 10:21:10
【问题描述】:

我遇到了一个问题:

RequestError(400, 'illegal_argument_exception', 'mapper [columns.analysis.abstract_stats.description.std] 不同类型, current_type [文本],merged_type [float]')

这导致我寻求here 描述的解决方案。

我当前产生上述错误的代码是:

from test_mapping import a

es = Elasticsearch([{'host': 'A.B.C.D', 'port': 9200}])

try:
    es.index(index='datatables', doc_type='datatable_v1', id="pallet_d3dd6729b810bebd955708e85afc1f65c3f2685c", body=a)
except Exception as e:
    print (e)

该索引之前存在,但我已将其删除,然后运行上述代码仍然产生上述错误。变量ahere

【问题讨论】:

  • 可以分享一下你用过的doc类型datatable_v1的映射关系吗?
  • 我怎样才能找回它?
  • 获取索引/doctype/_mapping
  • 您的映射似乎有问题!
  • 你的数据也有问题。许多文档将此 columns.analysis.abstract_stats.description.std 设置为“Nan”。这让 ES 将字段动态初始化为文本

标签: python python-3.x elasticsearch


【解决方案1】:

使用它来加载:

import simplejson
es.index(index='datatables', doc_type = 'datatable_v1', id = "pallet_d3dd6729b810bebd955708e85afc1f65c3f2685c", body = simplejson.dumps(a, ignore_nan = True))

这应该可以解决您的问题。现在您的应用程序会将此值读取为 None(这可能是此损坏的根源),您可以轻松实现您的功能

【讨论】:

    【解决方案2】:

    上述错误的原因是当您将数据发送到 elastic 时,它会为它在映射中发现缺失的键创建动态字段并尝试识别其类型。根据您在body 中发送的数据,columns.analysis.abstract_stats.description.std 处的值映射到 float 类型,但键 columns.analysis.abstract_stats.description.std 处的记录之一的值 'NaN' 无法映射到浮点字段和因此错误。您需要确保字段类型不会从一条记录更改为另一条记录。

    【讨论】:

      猜你喜欢
      • 2016-03-03
      • 2019-06-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-10-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多