我正在尝试使用 python 从文件中提取 JSON 数组并将其输入到 ElasticSearch 中。数组如下所示:
{"name": [["string1", 1, "string2"],["string3", 2, "string4"], ... (variable length) ... ["string n-1", 3, "string n"]]}
ElasticSearch 在尝试索引数组时抛出 TransportError(400, mapper_parsing_exception, failed to parse)。我发现,每当我尝试向它提供包含字符串和整数的字符串时,ElasticSearch 有时会抛出相同的错误。因此,例如,以下内容有时会崩溃,有时会成功:
import json
from elasticsearch import Elasticsearch
es = Elasticsearch()
test = json.loads('{"test": ["a", 1, "b"]}')
print test
es.index(index, body=test)
这段代码是我可以在不破坏程序的情况下安全地注释掉的所有内容。我将 JSON 放入程序中,而不是从文件中读取它。我输入的实际字符串很长(否则我只会发布它们)并且总是会使程序崩溃。将 JSON 更改为 "test": ["a"] 将使其工作。如果上次崩溃,当前设置会崩溃,或者如果上次成功,则可以正常工作。到底是怎么回事?某种映射设置会解决这个问题吗?我还没有弄清楚如何设置具有可变数组长度的地图。我更喜欢利用无模式输入,但我会采取任何有效的方法。