2017-09-19 53 views
1

我有以下CONFIGRATION对Hibernate的搜索工作:休眠搜索不区分大小写不corretly与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搜索 - 如果我通过GeO搜索返回值
- 如果我通过GeOR搜索返回值
- 它不返回任何
如果我搜索GeoR - 它返回值
如果我搜索GEOR - 它返回值

什么b广告与GeOR? 我该如何解决这个问题?

是否有可能调试这个框架?

回答

0

我定制WordDelimiterFilterFactory,现在这个工程:

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

首先,尝试用卢克,看看是什么在你的Lucene索引被索引:https://github.com/DmitryKey/luke/releases。您将能够看到令牌,这可能会帮助您了解发生的情况。

确保您的分析是正确的在你的领域定义和分析应用到您的查询过(可能是你如何定义你的领域,你如何执行查询一个好主意,向我们展示)。

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

+0

我如何能识别索引文件? – gstackoverflow