Hibernate Search - StandardAnalyzer,通过persistence.xml使用空的停用词

时间:2018-04-10 09:59:38

标签: hibernate-search

我通过persistence.xml对Hibernate Search的配置提出了疑问。用于索引和搜索的标准分析器是StandardAnalyzer。该分析器每个默认值都有一个英文停用词列表。我知道通过构造函数,这个stopword-list可以替换为自己的列表(或EMPTY_SET)。不幸的是,我在官方文档中找不到这样的选项。我发现的唯一事情就是可以通过hibernate.search.analyzer属性设置不同的分析器。我的问题:是否存在使用StandardAnalyzer时停用英语停用词的现有属性?

1 个答案:

答案 0 :(得分:1)

您可以定义自己的StandardAnalyzer子类,将所需参数传递给超级构造函数,并将hibernate.search.analyzer属性设置为子类的完全限定类名。 编辑:正如@AnarchoEnte所说,StandardAnalyzer是最后一堂课,所以你实际上不能这样做。

但在我看来,您最好定义自己的分析仪,完全按照标准分析仪的方式进行,但没有停用词:

@AnalyzerDef(
    name = "myDefault",
    tokenizer = @TokenizerDef(
        factory = org.apache.lucene.analysis.standard.StandardTokenizerFactory.class
    ),
    filters = {
        @TokenFilterDef(
            factory = org.apache.lucene.analysis.standard.StandardFilterFactory.class
        )
        @TokenFilterDef(
            factory = org.apache.lucene.analysis.core.LowerCaseFilterFactory.class
        )
    }
)
public class MyEntity { // The annotation must be on an indexed entity, which one doesn't matter.
...
}

然后将其设置为默认分析器:

hibernate.search.analyzer = myDefault

这样,如果您需要更改分析器(添加一些过滤器,更改标记器,......),您只需要更改该定义。