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

在Hibernate Search 6.1.8(Lucene后端)配置EdgeNGramFilter的min/maxGramSize

问题描述

我正尝试参考Hibernate Search 6.0.0.Beta2发布文档中的搜索分析器部分实现自动补全功能。

参考的示例代码如下:

@Entity
@Indexed
public class Book {

    @Id
    private Long id;

    @FullTextField(
            name = "title_autocomplete",
            analyzer = "autocomplete",
            searchAnalyzer = "autocomplete_query"
    )
    private String title;

    // ... getters and setters ...
}

为定义名为"autocomplete"的分析器和"autocomplete_query"的搜索分析器,我遵循自定义分析器与标准化器文档,编写了如下自定义Lucene分析器配置类并创建了新的persistence.xml:

public class CustomLuceneAnalysisConfigurer implements LuceneAnalysisConfigurer {

    @Override
    public void configure(LuceneAnalysisConfigurationContext context) {
        context.analyzer("autocomplete").custom()
            .tokenizer(StandardTokenizerFactory.class)
            .charFilter(HTMLStripCharFilterFactory.class)
            .tokenFilter(LowerCaseFilterFactory.class)
            .param("language", "English")
            .tokenFilter( ASCIIFoldingFilterFactory.class)
            .tokenFilter(EdgeNGramFilterFactory.class);

        context.analyzer("autocomplete_query").custom()
            .tokenizer(StandardTokenizerFactory.class)
            .charFilter(HTMLStripCharFilterFactory.class)
            .tokenFilter(LowerCaseFilterFactory.class)
            .param("language", "English")
            .tokenFilter(ASCIIFoldingFilterFactory.class);
    }
}
<property name="hibernate.search.backend.analysis.configurer"
  value="class:net.ad.mc.lucene_search.CustomLuceneAnalysisConfigurer"/>

我的问题是:是否可以通过上述配置方式设置EdgeNGramFilter的minGramSize和maxGramSize参数?我查阅了官方文档但未找到相关方法。


解答

可以设置这两个参数,只需在添加EdgeNGramFilterFactory后链式调用param()方法传入对应参数即可。修改后的autocomplete分析器配置如下:

context.analyzer("autocomplete").custom()
    .tokenizer(StandardTokenizerFactory.class)
    .charFilter(HTMLStripCharFilterFactory.class)
    .tokenFilter(LowerCaseFilterFactory.class)
    .param("language", "English")
    .tokenFilter(ASCIIFoldingFilterFactory.class)
    .tokenFilter(EdgeNGramFilterFactory.class)
    // 配置NGram参数
    .param("minGramSize", "2")
    .param("maxGramSize", "10");

参数值需以字符串形式传入,Lucene过滤器工厂会自动解析为对应数值类型。你可根据业务需求调整具体数值,比如设置最小2个字符、最大10个字符的前缀词范围。

另外注意,LowerCaseFilterFactory并不需要language参数,可移除对应的.param("language", "English")行,避免无效配置。

内容的提问来源于stack exchange,提问作者Lyn

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 17:23:10