You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.07 07:47:37