使用ES建立全文索引时,查询数据时出现如下异常:
MapperParsingException[No type specified for field [title]]
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
在使用Elasticsearch建立全文索引并进行查询时,遇到的错误信息MapperParsingException[No type specified for field [title]]
表明问题在于尝试对文档进行索引或查询时,没有为字段指定类型,并且使用的Elasticsearch版本可能是在7.0及以上。从ES 7.0开始,官方已逐步移除对mapping中"type"的支持,最终在7.0及更高版本中固定type为_doc
。
_doc
的type。_doc
作为其类型。检查索引请求:确保在创建索引或更新映射时,不包含任何自定义的"type"字段。例如,正确的索引文档命令应为:
PUT /your_index/_doc/1
{
"title": "文档标题",
"content": "文档内容"
}
注意URL路径中的_doc
部分。
修改查询请求:同样,在执行查询时,避免在查询DSL中指定type,直接针对索引进行查询即可。例如:
GET /your_index/_search
{
"query": {
"match": {
"title": "搜索关键词"
}
}
}
现有索引处理:如果错误来源于已存在的、包含多个type的老索引,您可能需要重新索引数据到一个新索引中,该新索引遵循无type的规定。可以使用Reindex API或者其它数据迁移工具来完成这一过程。
升级客户端代码或库:如果您是通过特定的客户端库(如Java High Level REST Client)操作Elasticsearch,确保该库版本与您的Elasticsearch服务器版本兼容,并且使用了符合当前版本语义的API调用方式。
通过上述步骤,您可以解决因未指定字段类型或使用了已废弃的"type"概念而导致的查询异常。