休眠搜索不区分大小写的搜索不适用于 LowerCaseFilterFactory

hibernate search case insensitive search is not corretly work with LowerCaseFilterFactory

我有以下休眠搜索配置:

@AnalyzerDef(name = "autocompleteNGramAnalyzer",

// Split input into tokens according to tokenizer
        tokenizer = @TokenizerDef(factory = StandardTokenizerFactory.class),

        filters = {
                // Normalize token text to lowercase, as the user is unlikely to
                // care about casing when searching for matches
                @TokenFilterDef(factory = WordDelimiterFilterFactory.class,
                        params = @Parameter(name = "catenateAll", value = "1")),
                @TokenFilterDef(factory = LowerCaseFilterFactory.class),
                @TokenFilterDef(factory = EdgeNGramFilterFactory.class, params = {
                        @Parameter(name = "minGramSize", value = "2"),
                        @Parameter(name = "maxGramSize", value = "5")})})

这个行为真的很奇怪。

我的字段值为 George Cain

如果我按 Ge 搜索 - 它 returns 值
如果我按 GeO 搜索 - 它 returns 值
如果我按 GeOR 搜索 - 它不会 returns 任何东西
如果我按 GeoR 搜索 - 它 returns 值
如果我按 GEOR 搜索 - 它 returns 值

GeOR 有什么不好? 我怎样才能解决这个问题?

这个框架可以调试吗?

首先,尝试使用 Luke 查看您的 Lucene 索引中已索引的内容:https://github.com/DmitryKey/luke/releases。您将能够看到令牌,这可能有助于您了解正在发生的事情。

确保您的分析器在您的字段上正确定义并且分析器也应用于您的查询(向我们展示您如何定义字段以及如何执行查询可能是个好主意)。

如果您最终认为这是一个错误,您可以使用我们的 https://github.com/hibernate/hibernate-test-case-templates/tree/master/search/hibernate-search-lucene 为我们提供一个独立的测试用例,以便我们查看。

我定制了 WordDelimiterFilterFactory,现在可以使用了:

 @TokenFilterDef(factory = WordDelimiterFilterFactory.class,
                        params = {
                                @Parameter(name = "catenateAll", value = "1"),
                                @Parameter(name = "generateWordParts", value = "0")})//generateWordParts = 1 by default