我在谷歌上搜尋了一下
我發現 ajax search 都是單一條件搜尋
後端接收都是 %{XXX}%
有點模糊搜尋
卻不能像谷歌搜尋那樣
我輸入越多條件 能搜得越精準
例如 「台北 美食 火鍋」
就可以透過這三個關鍵字去找到更精準的結果
我想問說ajax 能怎麼寫,也能夠有這樣的效果?
這個其實蠻有趣
我沒想過這個問題
但是你仔細觀察google的querystring
以這為例
你會發現q這個變數是由多個字串變成
就是說你搜尋打ajax search like function google
關鍵字用空格隔開
代表他在你按下搜尋的同時
他把你的搜尋字串把空格取代成+
然後丟進q這個變數裡
這樣做應該是querystring不能有空格
再來當後端接到時
正常來說我們後端要先定義好有那些變數
所以這邊就代表用q
來接收
在做字串切割變成陣列
SQL條件再用一個for迴圈讀出
我後端用C#的
所以我隨便寫個C#範例
string[] q = request.queryString("q").split('+');
strgin sql = "SELCT * FROM Table WHERE 0=0 AND (";
for(int i = 0;i < q.length ;i++)
{
sql += " OR 條件欄位 = " + q[i];
}
sql += ")";
大概這樣
理論上是這樣沒錯,
但是Google在實際運作上還有很多步驟,
而且針對幾十種語言應該都是分開處理的,
而且不是每個字都會顯示出來,
有"跟沒有"又會有差,
總之很多的眉角啊...
小魚
google的當然比較厲害囉
ajax不會有這樣的效果,
ajax只是接收後端傳過來的資料,
重點是你的後端API怎麼樣寫,
才會有這樣的效果,
這個要寫看起來很複雜了...
https://transbiz.com.tw/google%E6%90%9C%E5%B0%8B-search-tips/
單純做第一項的話,只是基於資料庫的實現應該還好,問題是如果資料量大,搜尋效能、背後如何評分網頁是最符合的,那就是google為何是google的原因了。
我也來試試看...
// 先對搜尋字串做點處理...(略
SELECT * FROM `table`
WHERE `column` REGEXP '(台北|美食|火鍋)'
ORDER BY `column`='台北' DESC, `column`='美食' DESC, `column`='火鍋' DESC
首先這和ajax沒關係,這是前端你要怎麼實作的問題
那就不提這個
你想要的應該是要找一個適合全文檢索引擎,用傳統RMDBS的查詢SELECT指令是很難達到的
不過後來DB 都有支援 你可以search "full text search",目前sql server 及 mysql
如果你想要實現簡單的全文檢索,這樣可以很容易達到
但如果要更好的效能,可能就要引入全文檢索引擎
還有全文檢索不單單只有找出來這樣,像如何斷詞斷字,相關性如何定義 等
以上簡單的藥引子,提供給你 希望對你有幫助