我在 flex 搜索中需要索引一些json(如下):
{
"array": [
"item1",
{
"name": "item2"
}
]
}
当我尝试索引这种类型的json结构时,出现错误:
{
"error": "MapperParsingException[failed to parse [array]]; nested: ElasticsearchIllegalArgumentException[unknown property [name]]; ",
"status": 400
}
现在我知道Elasticsearch变得混乱了,因为数组包含项1的字符串类型,然后包含项2的对象。
我的问题是,如何定义映射以处理此类数据?
最佳答案
唯一可行的方法是define your index mapping so that the array
field is not enabled
,因此使其不可搜索(Elasticsearch避免解析该字段)。
curl -XPUT localhost:9200/your-index -d '{
"mappings": {
"your-type" : {
"properties" : {
"array" : {
"type" : "object",
"enabled" : false
}
}
}
}
}'
您必须执行此操作,因为Elasticsearch将根据所看到的内容动态映射类型(如果您不告诉它映射)。在您的示例中,第一个元素将是字符串,因此它将
array
映射到字符串。当它撞击物体时,它不知道该怎么办,因此必须停止。这并不是听起来没什么用,因为您仍然可以从文档的
array
(假定已存储,默认情况下)中检索_source
的值。但是,这确实意味着在Elasticsearch中无法搜索array
中的信息。您可以通过搜索或获取请求来获取_source
。正如安德烈(Andrei)所评论的那样,您可以从拥有更清洁的物体中受益,但是有时候这只是它的实际用途。
关于json - 索引复杂数组结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26988317/