我正在尝试使用 python 从文件中提取 JSON 数组并将其输入到 ElasticSearch 中。该数组如下所示:
{"name": [["string1", 1, "string2"],["string3", 2, "string4"], ... (variable length) ... ["string n-1", 3, "string n"]]}
Run Code Online (Sandbox Code Playgroud)
当尝试为数组建立索引时,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)
Run Code Online (Sandbox Code Playgroud)
这段代码是我可以安全地注释掉而不破坏程序的所有内容。我将 JSON 放入程序中,而不是从文件中读取它。我输入的实际字符串非常长(否则我只会发布它们)并且总是会导致程序崩溃。将 JSON 更改为 "test": ["a"] 将使其正常工作。如果当前设置上次崩溃,则当前设置崩溃;如果上次设置有效,则当前设置有效。到底是怎么回事?某种映射设置可以解决这个问题吗?我还没有弄清楚如何设置具有可变数组长度的地图。我更喜欢利用无模式输入,但我会采取任何可行的方法。