我有以下关于hibernate搜索的信息:
@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有什么不好?我怎么才能解决这个问题?
可以调试这个框架吗?
发布于 2017-09-20 08:04:56
我定制了WordDelimiterFilterFactory,现在可以这样做了:
@TokenFilterDef(factory = WordDelimiterFilterFactory.class,
params = {
@Parameter(name = "catenateAll", value = "1"),
@Parameter(name = "generateWordParts", value = "0")})//generateWordParts = 1 by default发布于 2017-09-19 16:57:45
首先,尝试使用路克查看Lucene索引中已索引的内容:https://github.com/DmitryKey/luke/releases。您将能够看到令牌,这可能会帮助您了解正在发生的事情。
确保在您的字段上正确地定义了分析器,并且也将分析器应用于您的查询(可能是向我们展示如何定义您的字段和如何执行您的查询的一个好主意)。
如果您最终认为这是一个bug,您可以使用我们的https://github.com/hibernate/hibernate-test-case-templates/tree/master/search/hibernate-search-lucene为我们提供一个自包含的测试用例,以便我们可以查看。
https://stackoverflow.com/questions/46305598
复制相似问题