json - 索引复杂数组结构

标签 json elasticsearch

我在 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/

相关文章:

elasticsearch 向所有文档添加字段

java - 安装Logstash报错JAVA(OpenJDK 64-Bit Server VM警告)

elasticsearch - 为什么从1.x迁移到2.x时,Elasticsearch具有冲突的字段映射?

elasticsearch - 将嵌套查询与过滤器组合

ios - Objective-C 将 json 解析为对象列表

python - 为什么在尝试从 JSON 对象中删除值时出现错误 "' unicode' 对象不支持项目删除?

Javascript正则表达式匹配html中的json

c# - 如何将特定的 Json 节点反序列化为 Dictionary<string,object>?

javascript - 在 JavaScript 中搜索 JSON 数组中的数字

java - Elasticsearch查询聚合spring框架elasticsearsh如何?