hibernate搜索不区分大小写的搜索与LowerCaseFilterFactory无法正常工作

时间:2017-09-19 16:35:33

标签: java lucene full-text-search hibernate-search

我对hibernate-search进行了以下配置:

@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搜索 - 它会返回值
如果我按GeO搜索 - 它返回值
如果我按GeOR搜索 - 它不会返回任何内容 如果我按GeoR搜索 - 它返回值
如果我按GEOR搜索 - 它会返回值

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

是否可以调试此框架?

2 个答案:

答案 0 :(得分:2)

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

确保您的分析仪在您的现场正确定义,分析仪也应用于您的查询(最好向我们展示您如何定义字段以及如何执行查询)。

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

答案 1 :(得分:0)

我自定义WordDelimiterFilterFactory,现在可行:

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