Code Bye

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);
}
}

还请各位大虾指点指点~~!小弟不甚感激~~!


20分
LZ 可以断点跟踪,看看每一行处理的结果是什么。如果不好debug,可以多些打印,将每个定义的变量或者计算结果打印出来。
调用split的地方需要特别注意,很容易出问题。
感谢~!
已经试过打印与DEBUG,这是搜索对象 +(+val:*l* +val:*u*) +val:*lu* +(srcid:[77 TO 77])     主要是因为直接用通配符查询时有这个问题,所以后来才又加上了逐字通配查询,结果还是一样…     
数据库所存数据问题,与lucene查询无关,项目一直存在的错误,导入数据时有冲突情况…    线程不安全, 本该存一组数据的存了2~3组…

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明java lucene 按字母关键字查询时,会出现一些未匹配的数据