我想在休眠搜索中使用语音搜索的强大功能。问题是完全匹配没有排在搜索结果的顶部。例如,搜索“john”会返回以下结果列表:
- 乔恩
- 约翰
- 琼斯
我本来希望“约翰”列在首位
我通过以下方式定义了我的分析器:
@AnalyzerDef(name = "phonetic",
tokenizer = @TokenizerDef(factory = StandardTokenizerFactory.class),
filters = {
@TokenFilterDef(factory = StandardFilterFactory.class),
@TokenFilterDef(factory = PhoneticFilterFactory.class, params = {
@Parameter(name = "encoder", value = "DoubleMetaphone"),
@Parameter(name = "inject", value = "true")
})
})
@Analyzer(definition = "phonetic")
public class User{
@Field(index=Index.TOKENIZED, store=Store.YES)
private String firstname;
@Field(index=Index.TOKENIZED, store=Store.YES)
private String lastname;
}
使用以下代码完成搜索:
String[] fields = new String[] { "firstname", "lastname" };
MultiFieldQueryParser parser = new MultiFieldQueryParser(fields,
sf.getAnalyzer("phonetic"));
如果您能给我任何提示/帮助,您将如何获得此排名,那就太好了。我试图通过谷歌找到一些东西,我只发现这必须由我自己使用查询扩展来提高精确匹配而不是语音搜索结果......非常感谢你提前帮助我。我正在使用 Hibernate Search 3.1 和 Solr 1.3
兄弟,谢恩