如何在Hibernate Search实体中使用内置WhitespaceAnalyzer
Hibernate Search内置WhitespaceAnalyzer引用错误解决方法
问题根源
你碰到的HSEARCH000353错误,本质是分析器名称引用错误。Hibernate Search的内置分析器不用类名(比如WhitespaceAnalyzer)来引用,而是采用小写短名称,这里正确的名称是whitespace。
修正后的字段配置
直接修改@FullTextField的analyzer参数即可,完全不需要在application.properties中额外定义内置分析器:
@FullTextField(analyzer = "whitespace", projectable = Projectable.YES, termVector = TermVector.NO) @Column(name = "MY_FIELD") private String myField;
针对你的核心需求补充说明
你的字段值格式为1#J, 2#J, 3#N,使用whitespace分析器时,会按空格拆分出1#J,、2#J,、3#N这几个词条。如果不想保留词条末尾的逗号,可以自定义一个带符号清理规则的分析器:
方式1:注解配置自定义分析器
@AnalyzerDef(name = "whitespace_clean", tokenizer = @TokenizerDef(factory = WhitespaceTokenizerFactory.class), filters = { @TokenFilterDef(factory = PatternReplaceFilterFactory.class, params = { @Parameter(name = "pattern", value = ","), @Parameter(name = "replacement", value = ""), @Parameter(name = "replace", value = "all") }) } ) // 字段上引用这个自定义分析器 @FullTextField(analyzer = "whitespace_clean", projectable = Projectable.YES, termVector = TermVector.NO) @Column(name = "MY_FIELD") private String myField;
方式2:配置文件定义(Spring Boot环境)
先在application.properties指定分析器配置文件路径:
hibernate.search.backend.analysis.configurer=classpath:analysis-config.json
然后创建src/main/resources/analysis-config.json文件:
{ "analyzers": { "whitespace_clean": { "tokenizer": "whitespace", "filters": [ { "type": "pattern_replace", "pattern": ",", "replacement": "" } ] } } }
之后字段上同样引用analyzer = "whitespace_clean"即可。
内容的提问来源于stack exchange,提问作者kostas
相关产品推荐
相关产品推荐

