模糊查詢(排除%等通配符並支持不連續關鍵字查詢)


前段時間我在開發項目的時候,就關於模糊查詢遇到了一點問題,主要是有兩大問題:1、通配符問題;2、不連續關鍵字查詢。下面我一一說出我是怎么解決的:

1、統配符問題

比如說在搜索框中輸入'%'、'_'、'/'時會出錯,因為這些特殊符號在sql語句查詢的時候是有他特定的意義的,所有這里要對前台傳過來的keyword搜索內容進行排除通配符處理,我是在工具類中寫了一個方法代碼如下:

/**
* 根據搜索特殊字符串
* @param id
* @return 取不到返回null
*/
public static String specialStr(String str){
Integer index=str.indexOf("%");
Integer index1=str.indexOf("_");
Integer index2=str.indexOf("\\");
StringBuffer stringBuffer = new StringBuffer(str);
if(index!=-1) {
stringBuffer.insert(index, "\\");
}
if(index1!=-1) {
stringBuffer.insert(index1, "\\");
}
if(index2!=-1) {
stringBuffer.insert(index2, "\\");
}
return stringBuffer.toString();

}

然后在controller層導入該工具類,使用specialStr方法就ok了,代碼如下:

String keyword = request.getParameter("keyword");
String keyword1 = "";
if (!"".equals(keyword) && keyword != null) {
keyword1 = CommonUtils.specialStr(request.getParameter("keyword"));// 排除%等通配符

}最后將keyword1作為搜索內容帶到數據庫中查詢就行了。

2、不連續關鍵字查詢

當在搜索框中輸入不連續的關鍵字時,也能從數據庫中搜索的到該內容,就比如:我想搜索公司名稱為阿里巴巴的數據信息時,我輸入阿巴也能搜索的到阿里巴巴,這該怎么處理呢?其實很簡單,也是寫一個工具類,將搜索框中的字符串每兩個字符之間都加上一個‘%’就ok了,具體代碼如下:


public static String specialStrKeyword(String str){
if(str==null||str==""){
return null;
}
StringBuffer stringBuffer = new StringBuffer(str);
int length=str.length();
for (int i = 0; i <length; i++) {
char chari=stringBuffer.charAt(i);
if(i==0){
if(chari=='%'||chari=='_'||chari=='\\'){
stringBuffer.insert(i, "\\");
i++;
length++;
}
}else{
if(chari=='%'||chari=='_'||chari=='\\'){
stringBuffer.insert(i, "%\\");
i+=2;
length+=2;
}else{
stringBuffer.insert(i, "%");
i++;
length++;
}
}
}
return stringBuffer.toString();

}

同樣在controller層導入該工具類,使用specialStrKeyword方法就ok了,代碼如下:

String keyword = request.getParameter("keyword");
String keyword1 = '';
if (!"".equals(keyword) && keyword != null) {
keyword1 = CommonUtils.specialStr(request.getParameter("keyword"));// 排除%等通配符
keyword1 = CommonUtils.specialStrKeyword(keyword1);
}

最后將keyword1作為搜索內容帶到數據庫中查詢就行了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM