我对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
有什么不好?
我怎样才能解决这个问题?
是否可以调试此框架?
答案 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