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