修改Elasticsearch Mapping报错:无法转换term.index为布尔值
解决Elasticsearch映射更新的
Could not convert [term.index] to boolean错误 嘿,这个问题我太熟了!你遇到的错误核心原因是用了Elasticsearch旧版本的语法,而当前版本的index参数已经是布尔类型(只能传true/false),不再支持"not_analyzed"这个字符串值。
先拆解下你的问题:
- 你想让
term字段不被分析,但给text类型设置"index": "not_analyzed"是完全错误的——not_analyzed是旧版本里用来标记字段不分析的方式,现在这个需求已经被keyword类型替代了。 - 另外你的请求路径
PUT /in_test/_mapping/keyword也不对,更新映射不需要在路径里加/keyword。
给你两种针对性的解决方案:
方案1:直接将字段设为keyword类型(满足“不被分析”的需求)
如果你的需求就是让term字段做精确匹配、聚合等操作,不需要全文分析,直接把类型改成keyword就好,它默认就是不分析的:
PUT /in_test/_mapping { "properties": { "term": { "type": "keyword" } } }
方案2:使用多字段(同时支持全文搜索和精确匹配)
如果你既需要term字段能做全文搜索(用text类型的分析能力),又需要它能做精确匹配/聚合,那就用多字段(multi-fields)配置:
PUT /in_test/_mapping { "properties": { "term": { "type": "text", "fields": { "raw": { "type": "keyword" } } } } }
这样之后,你可以用term字段做全文搜索,用term.raw字段做精确匹配或者聚合操作,完美兼顾两种需求。
内容的提问来源于stack exchange,提问作者Kunal Kakade
相关产品推荐
相关产品推荐

