在弹性搜索中将Json字段存储为字符串?

时间:2014-09-16 07:08:15

标签: json indexing elasticsearch mapping

我试图在弹性搜索中索引一个json字段,我已经给它外部映射,该字段应该被视为字符串而不是json,它也不需要索引,所以不需要分析它。对此的映射如下

"json_field": {
    "type": "string",
    "index": "no"
},

仍然在编制索引时,此字段正在分析中,因此我得到MapperParsingException

简介如何在不进行分析的情况下将json存储为弹性搜索中的字符串?

3 个答案:

答案 0 :(得分:20)

终于明白了, 如果你想将json存储为字符串而不进行分析,那么映射应该是这样的

"json_field": {
    "type": "object",
    "enabled" : false
},

enabled标志允许完全禁用对命名对象的解析和索引。当JSON文档的一部分包含不应被索引的任意JSON,也不会添加到映射中时,这很方便。

答案 1 :(得分:2)

截至今天,ElasticSearch 7.12“已启用”现在是“index”。

所以映射应该是这样的:

"json_field": {
    "type": "object",
    "index" : false
},

答案 2 :(得分:0)

解决方案

为该字段设置"enabled": false

curl -X PUT "localhost:9200/{{INDEX-NAME}}/_mapping/doc" -H 'Content-Type: application/json' -d'
{
    "properties" : {
      "json_field" : {
        "type" : "object",
        "enabled": false
      }
    }
}

注意:这不能应用于现有字段。在创建索引期间在映射中传递它,也可以随时创建一个新字段。

说明

  

已启用的设置(仅可应用于顶级映射定义和对象字段)使Elasticsearch完全跳过对字段内容的解析。仍然可以从_source字段中检索JSON,但是无法搜索或以其他任何方式存储JSON:

参考:Elasticsearch Docs