这与社会保障#实际上是一样的。
如果我有这种格式的代码:
WHO-S-09-0003
我希望能够做到:
query = qb.keyword().onFields("key").matching("WHOS090003").createQuery();
我尝试使用WhitespaceAnalyzer。
答案 0 :(得分:3)
使用 StandardAnalyzer 或 WhitespaceAnalyzer 都有同样的问题。他们会将“WHO-S-09-0003”编入索引,这意味着当您进行搜索时,只有在搜索词中有连字符时才会起作用。 解决问题的一个方法是实现自己的 TokenFilter ,它会检测代码的格式并在索引编制期间删除连字符。您可以使用 AnayzerDef 构建一系列toekn过滤器和一个整体自定义分析器。当然,在搜索时你必须使用相同的分析器,但Hibernate Search查询DSL将负责这一点。
答案 1 :(得分:0)
实际上你可以像这样实现自己的方法:
private String specialCharacters(String keyword) {
String [] specialChars = {"-","!","?"};
for(int i = 0; i < specialChars.length; i++ )
if(keyword.indexOf(specialChars[i]) > -1)
keyword = keyword.replace(specialChars[i], "\\"+specialChars[i]);
return keyword;
}
如你所知lucene有特殊的字符,所以如果你想要转义特殊字符,那么你应该在字符之前插入char双反斜杠......