我试图在弹性搜索中索引一个json字段,我已经给它外部映射,该字段应该被视为字符串而不是json,它也不需要索引,所以不需要分析它。对此的映射如下
"json_field": {
"type": "string",
"index": "no"
},
仍然在编制索引时,此字段正在分析中,因此我得到MapperParsingException
简介如何在不进行分析的情况下将json存储为弹性搜索中的字符串?
答案 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: