java lucene 按字母关键字查询时,会出现一些未婚配的数据
java lucene 按字母关键字查询时,会出现一些未匹配的数据


处理关键字的代码如下:
if是处理的汉字,达到的效果可以满足需求
现在的问题是查询少量字母时,会出现少量未匹配的数据,5,6个字母以上就没问题,带数字也没问题。
String keyWord = null;
keyWord = ((String) v).split(" ")[0];
if(keyWord != null && keyWord.trim() != "" && keyWord != " " && keyWord.trim().length()>0){
if(keyWord.getBytes().length > keyWord.length()){
BooleanQuery bq = new BooleanQuery();
String kw = keyWord.replaceAll("[a-zA-z0-9 ]","");
System.out.println("keyWord:"+kw);
String[] string = kw.split("");
List<String> slist = Arrays.asList(string);
for(String s : slist){
if(s.trim() != "" && s != null && s.length()>0){
// System.out.println("sssssss:"+s);
WildcardQuery wq = new WildcardQuery(new Term(k,"*"+s+"*"));
bq.add(wq,BooleanClause.Occur.MUST);
}
}
searchQuery.add(bq,BooleanClause.Occur.MUST);
}else{
BooleanQuery bq = new BooleanQuery();
String[] string = keyWord.split("");
List<String> slist = Arrays.asList(string);
for(String s : slist){
if(s.trim() != "" && s != null && s.length()>0){
WildcardQuery wq = new WildcardQuery(new Term(k,"*"+s+"*"));
bq.add(wq,BooleanClause.Occur.MUST);
}
}
searchQuery.add(bq,BooleanClause.Occur.MUST);
WildcardQuery q = new WildcardQuery(new Term(k,"*"+keyWord+"*"));
searchQuery.add(q,BooleanClause.Occur.MUST);
}
}
还请各位大虾指点指点~~!小弟不甚感激~~!
------解决方案--------------------
LZ 可以断点跟踪,看看每一行处理的结果是什么。如果不好debug,可以多些打印,将每个定义的变量或者计算结果打印出来。
调用split的地方需要特别注意,很容易出问题。
处理关键字的代码如下:
if是处理的汉字,达到的效果可以满足需求
现在的问题是查询少量字母时,会出现少量未匹配的数据,5,6个字母以上就没问题,带数字也没问题。
String keyWord = null;
keyWord = ((String) v).split(" ")[0];
if(keyWord != null && keyWord.trim() != "" && keyWord != " " && keyWord.trim().length()>0){
if(keyWord.getBytes().length > keyWord.length()){
BooleanQuery bq = new BooleanQuery();
String kw = keyWord.replaceAll("[a-zA-z0-9 ]","");
System.out.println("keyWord:"+kw);
String[] string = kw.split("");
List<String> slist = Arrays.asList(string);
for(String s : slist){
if(s.trim() != "" && s != null && s.length()>0){
// System.out.println("sssssss:"+s);
WildcardQuery wq = new WildcardQuery(new Term(k,"*"+s+"*"));
bq.add(wq,BooleanClause.Occur.MUST);
}
}
searchQuery.add(bq,BooleanClause.Occur.MUST);
}else{
BooleanQuery bq = new BooleanQuery();
String[] string = keyWord.split("");
List<String> slist = Arrays.asList(string);
for(String s : slist){
if(s.trim() != "" && s != null && s.length()>0){
WildcardQuery wq = new WildcardQuery(new Term(k,"*"+s+"*"));
bq.add(wq,BooleanClause.Occur.MUST);
}
}
searchQuery.add(bq,BooleanClause.Occur.MUST);
WildcardQuery q = new WildcardQuery(new Term(k,"*"+keyWord+"*"));
searchQuery.add(q,BooleanClause.Occur.MUST);
}
}
还请各位大虾指点指点~~!小弟不甚感激~~!
------解决方案--------------------
LZ 可以断点跟踪,看看每一行处理的结果是什么。如果不好debug,可以多些打印,将每个定义的变量或者计算结果打印出来。
调用split的地方需要特别注意,很容易出问题。