2010-07-18 76 views
3

我有一個名字表在我的數據庫,我會希望它進行模糊搜索,例如我的數據庫包含:MySQL的:進行基本的搜索

Name   ID 
John Smith 1 
Edward Smith 2 
Gabriel Gray 3 
Paul Roberts 4 

在那一刻,我通過搜索數據庫python我只能做精確的匹配搜索。但我希望能夠進行模糊搜索,在那裏我可以搜索名稱「史密斯」,並帶回約翰史密斯和愛德華史密斯。

+1

你只需要它是不區分大小寫的?或者你真的需要它來爲類似的字符串返回匹配(即:搜索帶回約翰史密斯和愛德華史密斯)? – quantumSoup 2010-07-18 19:36:41

+0

返回類似的字符串,所以case sesensitivity需要 – Jim 2010-07-18 19:43:23

+1

,因爲「模糊搜索」通常意味着這個:http://en.wikipedia.org/wiki/Approximate_string_matching – 2010-07-18 20:01:49

回答

5

在最簡單的形式,你會使用LIKE比較:

SELECT * FROM table WHERE name LIKE '%smith%'; 

更復雜的搜索可以用FULLTEXT指數(大量的文字),SOUNDEX()(適用於詞語的英語,配套DE完成在其他語言中是一切從'有點可行'到'可怕'),levenshtein距離的單詞等。

+2

要添加到這一點,如果您選擇適當的排序規則(一個具有_ci後綴),您可以在MySQL中使用不區分大小寫的比較 – quantumSoup 2010-07-18 19:39:16

+0

謝謝,最簡單的形式id我在找什麼 – Jim 2010-07-18 19:42:28

0
import MySQLdb 
search_str = 'smith' 
conn = MySQLdb.connect(host="localhost", user="me",passwd="pw",db="mydb") 
c = conn.cursor() 
c.execute("SELECT name FROM mytable WHERE name LIKE %s", '%' + search_str + '%') 
c.fetchall() 
c.close() 
conn.close()