Hibernate Search与Elasticsearch:mapper_parsing_exception错误排查
解决思路与步骤
首先看你遇到的错误analyzer [portugueseAnalyzer] not found,核心原因是Elasticsearch索引中并没有正确注册这个分析器,我们一步步排查:
1. 缺失edge_ngram_3 Token Filter的定义
你的分析器代码里引用了edge_ngram_3这个token filter,但没有在register方法中定义它!Elasticsearch无法识别未注册的token filter,这会导致整个portugueseAnalyzer创建失败,自然在索引中找不到它。
修复你的Analyzer类,添加这个token filter的定义:
public class Analyzer implements ElasticsearchAnalysisDefinitionProvider { @Override public void register(ElasticsearchAnalysisDefinitionRegistryBuilder builder) { // 先定义自定义token filter builder.tokenFilter("portugueseStemmer") .type("stemmer").param("language", "portuguese"); builder.tokenFilter("portugueseStop") .type("stop").param("stopwords", "_portuguese_"); // 添加缺失的edge_ngram_3定义 builder.tokenFilter("edge_ngram_3") .type("edge_ngram") .param("min_gram", "3") // 根据你的需求调整数值 .param("max_gram", "20"); // 再定义分析器 builder.analyzer("portugueseAnalyzer") .withTokenizer("standard") .withTokenFilters("lowercase", "portugueseStemmer", "portugueseStop", "edge_ngram_3"); } }
2. 确保Hibernate Search正确加载分析器提供者
你需要让Hibernate Search知道要使用这个分析器定义类,否则它不会自动注册到Elasticsearch:
- 如果是JPA的
persistence.xml配置,添加以下属性:<property name="hibernate.search.elasticsearch.analysis_definition_provider" value="com.your.package.Analyzer"/> <!-- 替换成你的类全限定名 --> - 如果是Spring Boot项目,在
application.properties或application.yml中添加:spring.jpa.properties.hibernate.search.elasticsearch.analysis_definition_provider=com.your.package.Analyzer
3. 重新创建索引(或更新索引设置)
之前的索引可能因为分析器创建失败,没有包含portugueseAnalyzer的定义。你需要:
- 先删除旧索引:
DELETE {{elasticsearch}}/com.orm.entity.entity.entity - 重启你的应用,让Hibernate Search重新创建索引,此时它会自动注册分析器到索引的settings中
- 确认分析器已存在:发送
GET {{elasticsearch}}/com.orm.entity.entity.entity/_settings,检查analysis节点下是否有portugueseAnalyzer的定义
4. 调整动态模板的添加时机
不要在索引创建前手动添加动态模板,应该等Hibernate Search完成索引创建(包含分析器注册)后,再执行PUT映射的请求添加动态模板。这样Elasticsearch就能找到已经注册的portugueseAnalyzer了。
额外检查:AWS Elasticsearch 5.6的兼容性
AWS ES 5.6对自定义分析器的支持是完整的,但要注意:
- 确保你的IAM权限允许修改索引settings和mapping
- 避免使用AWS ES不支持的分析器类型(你的配置里用的都是标准类型,没问题)
内容的提问来源于stack exchange,提问作者raffah
相关产品推荐
相关产品推荐

