elasticsearch,mapping,Json,Indexing,elasticsearch,Mapping" /> elasticsearch,mapping,Json,Indexing,elasticsearch,Mapping" />

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

在弹性搜索中将Json字段存储为字符串?,json,indexing,elasticsearch,mapping,Json,Indexing,elasticsearch,Mapping,我试图在弹性搜索中索引一个json字段,我已经给了它外部映射,这个字段应该被视为字符串而不是json,也不需要索引,所以不需要分析它。这方面的映射如下所示 "json_field": { "type": "string", "index": "no" }, 在编制索引时,该字段仍在进行分析,因此我得到了MapperParsingException 简而言之,在弹性搜索中,我们如何将json存储为字符串而不进行分析?最终得到了它, 如果希望将JSON存储为字符串,而不进行分析,则

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

"json_field": {
    "type": "string",
    "index": "no"
},
在编制索引时,该字段仍在进行分析,因此我得到了
MapperParsingException

简而言之,在弹性搜索中,我们如何将json存储为字符串而不进行分析?

最终得到了它, 如果希望将JSON存储为字符串,而不进行分析,则映射应如下所示

"json_field": {
    "type": "object",
    "enabled" : false
},
启用标志允许完全禁用对命名对象的解析和索引。当JSON文档的一部分包含不应编制索引或添加到映射中的任意JSON时,这非常方便


更新-从ES版本7.12“已启用”更改为“索引”。解决方案

为字段设置
“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完全跳过对字段内容的解析。JSON仍然可以从_source字段中检索,但不可搜索或以任何其他方式存储:


参考:

从今天起,ElasticSearch 7.12“已启用”现在为“”

所以映射应该是这样的:

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