2011-11-07 66 views
0

我有一個表[用戶]與FName,LName和城市3列。我想實現一個搜索算法,該算法由3個列產生,頂部爲AND,結果爲ORed。使用sql和asp.net的高級搜索查詢

對於如:

  1. 拉朱拉姆班加羅爾
  2. 拉姆拉朱海德拉巴
  3. 克里希納拉朱奈

當我搜索拉朱奈應該導致所有的記錄與第3條記錄頂部,因爲它是完全匹配和其他2可以遵循。我怎樣才能做到這一點?請指教。

回答

1

您將需要查找搜索加權算法。沒有人可以爲你寫你的算法,這是你決定什麼需要更多的權重。

像這樣的高級搜索並不簡單。有很多因素(列出太多),取決於您想要在搜索中投入多少努力。

一個好的開始將是使用您正在使用的任何.NET語言來分割搜索查詢中的每個單詞。也許你會想要比下一個和下一個更重要的第一個單詞,依此類推?

然後決定哪一個對搜索更重要。或許LNameCity更重要?如果是這樣,當在任一搜索詞中找到匹配項時,可以將該列的權重與搜索查詢中該詞的位置權重相乘。

那麼對於找到的多個列,您可以將它們添加在一起?乘以它們?也許在乘以之前將LName重量平方?任何你認爲會使體重更加準確(只要保持表現)。

你可以做任何你想要加權的每一行,但是當算法完成時,你可以簡單地使用ORDER BY Weight來把最有可能的行放在最上面,然後「嗨!

+0

嘿謝謝你的好主意。會試試看。 –

0

有一點煩瑣,但作爲一個起點,動態地爲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 
0

我相信,你可以利用複雜的算法進行全文搜索。一些DBMS(如MSSQL)有自己的實現,但您可以使用免費和開源的Lucene。