我有一個名字表在我的數據庫,我會希望它進行模糊搜索,例如我的數據庫包含:MySQL的:進行基本的搜索
Name ID
John Smith 1
Edward Smith 2
Gabriel Gray 3
Paul Roberts 4
在那一刻,我通過搜索數據庫python我只能做精確的匹配搜索。但我希望能夠進行模糊搜索,在那裏我可以搜索名稱「史密斯」,並帶回約翰史密斯和愛德華史密斯。
我有一個名字表在我的數據庫,我會希望它進行模糊搜索,例如我的數據庫包含:MySQL的:進行基本的搜索
Name ID
John Smith 1
Edward Smith 2
Gabriel Gray 3
Paul Roberts 4
在那一刻,我通過搜索數據庫python我只能做精確的匹配搜索。但我希望能夠進行模糊搜索,在那裏我可以搜索名稱「史密斯」,並帶回約翰史密斯和愛德華史密斯。
在最簡單的形式,你會使用LIKE
比較:
SELECT * FROM table WHERE name LIKE '%smith%';
更復雜的搜索可以用FULLTEXT指數(大量的文字),SOUNDEX()
(適用於詞語的英語,配套DE完成在其他語言中是一切從'有點可行'到'可怕'),levenshtein距離的單詞等。
要添加到這一點,如果您選擇適當的排序規則(一個具有_ci後綴),您可以在MySQL中使用不區分大小寫的比較 – quantumSoup 2010-07-18 19:39:16
謝謝,最簡單的形式id我在找什麼 – Jim 2010-07-18 19:42:28
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()
你只需要它是不區分大小寫的?或者你真的需要它來爲類似的字符串返回匹配(即:搜索帶回約翰史密斯和愛德華史密斯)? – quantumSoup 2010-07-18 19:36:41
返回類似的字符串,所以case sesensitivity需要 – Jim 2010-07-18 19:43:23
,因爲「模糊搜索」通常意味着這個:http://en.wikipedia.org/wiki/Approximate_string_matching – 2010-07-18 20:01:49