2013-05-04 63 views
0

我試圖創建一個網絡商店,搜索引擎,我想使這個:Sql進階搜索

如果客戶端在搜索欄中寫入前銀河白我想執行相匹配的SQL查詢字符串不僅帶有銀河系白色s3等標題的產品,還有銀河系s3白色16 gb等標題。

這可能嗎?

+1

簡短的回答 - 是的,這是可能的。如果您正在尋找開箱即用的解決方案,它取決於您正在使用的RDMS(SQLServer,Oracle,MySql,Postgres等)。 – a1ex07 2013-05-04 19:43:47

+0

刪除了你的重複段落 – Yaroslav 2013-05-04 19:44:58

回答

1

您可以通過查看搜索到的關鍵字和數據庫中的標題之間的距離來輕鬆實現搜索。 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對同義詞的建議是一個好主意。它會改善你的結果。此外,我會建議使用標籤,例如,如果用戶搜索屬性說藍牙,您可能想要返回藍牙支持的設備。

+0

這是我的榮幸! – 2013-05-04 20:03:26

+0

我試過Levenshtein,但我不認爲它是非常有用的。如果用戶放置銀河白色我想向他展示包含銀河和白色的標題的所有產品.Levenshtein只返回字符串的差異 – Nick 2013-05-04 21:51:57

+0

噢好吧。我想它也分裂了字符串,但是在像權力遊戲這樣的輸入的情況下,我得到了5個字符串和一個很長的查詢。 – Nick 2013-05-05 08:58:14

1

爲了更準確,可能需要提供「類似短語」(同義詞)。由於例如您正在Windows Phone 8上尋找手機,您可能只需鍵入「WP8」,Levenshtein距離無法解決該問題。

+1

+1同義詞。由於這個問題沒有提到同義詞,我建議Levenshtein是我頭頂的。 – 2013-05-04 19:51:06

+1

你是對的,你的回答非常好,雖然我的回答是一個建議。 – 2013-05-04 19:52:56