我試圖創建一個網絡商店,搜索引擎,我想使這個:Sql進階搜索
如果客戶端在搜索欄中寫入前銀河白我想執行相匹配的SQL查詢字符串不僅帶有銀河系白色s3等標題的產品,還有銀河系s3白色16 gb等標題。
這可能嗎?
我試圖創建一個網絡商店,搜索引擎,我想使這個:Sql進階搜索
如果客戶端在搜索欄中寫入前銀河白我想執行相匹配的SQL查詢字符串不僅帶有銀河系白色s3等標題的產品,還有銀河系s3白色16 gb等標題。
這可能嗎?
您可以通過查看搜索到的關鍵字和數據庫中的標題之間的距離來輕鬆實現搜索。 Levenshtein distance算法是一個很好的距離算法。
UPDATE:對於子詞串搜索
萊文斯坦是好的mispellings。除此之外,您可以將字符串拆分爲單詞,然後使用Naïve字符串搜索您的單詞。然後你可以將結果與Levenshtein結果聯合起來。
例如,如果用戶搜索「galaxy white s4」;
您可以將這個字符串分割成三句話:
galaxy
white
s4
然後對每個單詞,你可以在標題,如一個天真的字符串搜索:
SELECT * FROM Titles
WHERE
Titles LIKE '%galaxy%' OR
Titles LIKE '%white%' OR
Titles LIKE '%s4%'
到現在爲止,這應該解決你的問題。但我有幾點建議!
Michal Borek對同義詞的建議是一個好主意。它會改善你的結果。此外,我會建議使用標籤,例如,如果用戶搜索屬性說藍牙,您可能想要返回藍牙支持的設備。
爲了更準確,可能需要提供「類似短語」(同義詞)。由於例如您正在Windows Phone 8上尋找手機,您可能只需鍵入「WP8」,Levenshtein距離無法解決該問題。
+1同義詞。由於這個問題沒有提到同義詞,我建議Levenshtein是我頭頂的。 – 2013-05-04 19:51:06
你是對的,你的回答非常好,雖然我的回答是一個建議。 – 2013-05-04 19:52:56
簡短的回答 - 是的,這是可能的。如果您正在尋找開箱即用的解決方案,它取決於您正在使用的RDMS(SQLServer,Oracle,MySql,Postgres等)。 – a1ex07 2013-05-04 19:43:47
刪除了你的重複段落 – Yaroslav 2013-05-04 19:44:58