我有一個表[用戶]與FName,LName和城市3列。我想實現一個搜索算法,該算法由3個列產生,頂部爲AND,結果爲ORed。使用sql和asp.net的高級搜索查詢
對於如:
- 拉朱拉姆班加羅爾
- 拉姆拉朱海德拉巴
- 克里希納拉朱奈
當我搜索拉朱奈應該導致所有的記錄與第3條記錄頂部,因爲它是完全匹配和其他2可以遵循。我怎樣才能做到這一點?請指教。
我有一個表[用戶]與FName,LName和城市3列。我想實現一個搜索算法,該算法由3個列產生,頂部爲AND,結果爲ORed。使用sql和asp.net的高級搜索查詢
對於如:
當我搜索拉朱奈應該導致所有的記錄與第3條記錄頂部,因爲它是完全匹配和其他2可以遵循。我怎樣才能做到這一點?請指教。
您將需要查找搜索加權算法。沒有人可以爲你寫你的算法,這是你決定什麼需要更多的權重。
像這樣的高級搜索並不簡單。有很多因素(列出太多),取決於您想要在搜索中投入多少努力。
一個好的開始將是使用您正在使用的任何.NET語言來分割搜索查詢中的每個單詞。也許你會想要比下一個和下一個更重要的第一個單詞,依此類推?
然後決定哪一個對搜索更重要。或許LName
比City
更重要?如果是這樣,當在任一搜索詞中找到匹配項時,可以將該列的權重與搜索查詢中該詞的位置權重相乘。
那麼對於找到的多個列,您可以將它們添加在一起?乘以它們?也許在乘以之前將LName
重量平方?任何你認爲會使體重更加準確(只要保持表現)。
你可以做任何你想要加權的每一行,但是當算法完成時,你可以簡單地使用ORDER BY Weight
來把最有可能的行放在最上面,然後「嗨!
有一點煩瑣,但作爲一個起點,動態地爲OR創建WHERE子句,然後UNION將結果與精確匹配。還包括排序欄,例如
SELECT FName, LName, City, 1 AS SortOrder
FROM Users
WHERE
FName = 'Raju' OR
FName = 'Chennai' -- Add the rest of the OR clauses
UNION
SELECT FName, LName, City, 0 AS SortOrder
WHERE FName + ' ' + LName + ' ' + City LIKE '%Raju Chennai%'
ORDER BY SortOrder
我相信,你可以利用複雜的算法進行全文搜索。一些DBMS(如MSSQL)有自己的實現,但您可以使用免費和開源的Lucene。
嘿謝謝你的好主意。會試試看。 –