要搜索的人的名字是“Suleman Kumar With”,其中With是姓氏。它适用于所有其他名字,但不适用于此英语关键字
下面是我创建Lucene索引的方法:
@Fields({ @Field(index = Index.YES, store = Store.NO),
@Field(name = "LastName_Sort", index = Index.YES, analyzer = @Analyzer(definition = "sortAnalyzer")) })
@Column(name = "LASTNAME", length = 50)
public String getLastName() {
return lastName;
}
sortAnalyzer具有以下配置:
@AnalyzerDef(name = "sortAnalyzer",
tokenizer = @TokenizerDef(factory = KeywordTokenizerFactory.class),
filters = {
@TokenFilterDef(factory = LowerCaseFilterFactory.class),
@TokenFilterDef(factory = PatternReplaceFilterFactory.class, params = {
@Parameter(name = "pattern", value = "('-&\\.,\\(\\))"),
@Parameter(name = "replacement", value = " "),
@Parameter(name = "replace", value = "all")
}),
@TokenFilterDef(factory = PatternReplaceFilterFactory.class, params = {
@Parameter(name = "pattern", value = "([^0-9\\p{L} ])"),
@Parameter(name = "replacement", value = ""),
@Parameter(name = "replace", value = "all")
})
}
)
可以搜索姓氏和主键:ID,我在那里得到令牌不匹配错误。
2条答案
按热度按时间ljsrvy3e1#
我已经实现了它使用我自己的“自定义分析器”。
在字段中调用此分析器,将忽略非索引字。
dvtswwa32#
对于Hibernate搜索版本5,您可以使用这样的自定义分析器: