如何在Python中使用发布请求在Elasticsearch中建立索引?

时间:2018-11-30 09:17:46

标签: python python-3.x elasticsearch

我面临一个问题:

  

RequestError(400,'illegal_argument_exception','mapper   不同类型的[columns.analysis.abstract_stats.description.std],   current_type [text],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

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

使用它来加载:

for (j = 1; j < selElmnt.length; j++) {

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