Hibernate搜索自定义停用词列表

时间:2017-11-04 14:37:14

标签: java hibernate lucene hibernate-search

我需要通过Document标题自定义停用词列表以进行搜索 我有以下映射:

@Entity
@Indexed
@AnalyzerDef(
        name = "documentAnalyzer",
        tokenizer = @TokenizerDef(factory = StandardTokenizerFactory.class),
        filters = {
                @TokenFilterDef(factory = ASCIIFoldingFilterFactory.class),
                @TokenFilterDef(factory = LowerCaseFilterFactory.class),
                @TokenFilterDef(
                        factory = StopFilterFactory.class,
                        params = {
                                @Parameter(name = "words", value = "stoplist.properties"),
                                @Parameter(name = "ignoreCase", value = "true")
                        }
                )
        }
)
public class Document {

    ...

    @Field(analyzer = @Analyzer(definition = "documentAnalyzer"))
    private String title;

    ...
}

stoplist.properties文件位于resources目录中,其中包含与StandardAnalyzer默认值不同的停用词。

但是,如果我使用默认启用但在我的stoplist.properties文件中不存在的停用词,则搜索不会返回任何结果,例如单词will

当前配置有什么问题? 如何让hibernate搜索使用自定义停用词列表?

我使用的是hibernate-search-orm 5.6.1版本。

结果在具有即时创建索引的集成测试中得到验证:

@Before
public void setUpLuceneIndex() throws InterruptedException {
    FullTextEntityManager fullTextEntityManager = Search.getFullTextEntityManager(entityManager);
    fullTextEntityManager.createIndexer().startAndWait();
}

1 个答案:

答案 0 :(得分:1)

就我所见,您的配置看起来很清晰。

在更改停用词配置后,您是否重新编制了实体索引?您需要在索引时考虑新配置。

如果你这样做但它仍然无效,请尝试在StopFilterFactory构造函数中添加断点并通知方法以查看正在发生的事情!