2013-10-11 31 views
0

我試圖在MySQL表中搜索一個商店名稱,表中有一個名爲fullname的字段。截至目前,我正在使用MySQL的SOUNDS LIKE方法,但這裏有一個失敗的例子:如何在列中執行MySQL智能文本搜索?

說我有字符串Banana's Shop。然後使用SOUNDS LIKE查詢'nana'或'bananas'不會給我結果。這裏是我當前的查詢:

SELECT `fullName` FROM `shop` WHERE `fullName` SOUNDS LIKE 'nana'; 

有沒有更好的辦法做到像這樣簡單的搜索在MySQL中是更聰明,使錯字的也將仍然匹配嗎?

回答

0

SOUNDS LIKE使用的古老和稍高級的SOUNDEX算法不處理後綴聲音。也就是說,nana不會,也不能匹配banana。但是,banani將匹配banana

兩個話語不一定聽起來很像,除非他們有相同數量的音節。匹配諸如姓氏的東西是很好的:Smith,Schmitt和Schmidt都具有相同的SOUNDEX值。

調用SOUNDEX'智能文本搜索'是誇張的。 http://en.wikipedia.org/wiki/Soundex

你可能會考慮MySQL FULLTEXT搜索,你可以查看。這會進行一定量的詞組匹配。也就是說,如果你的專欄中有「香蕉店」和「香蕉slu」「,那麼」香蕉「這個詞就會有一個匹配這兩個值的鏡頭。

小心使用FULLTEXT。當你搜索的表中少於幾百行時,它會違反直覺地工作。

但這不是一個錯字友好的詞匹配器。你所問的不是很容易。

你可以考慮Levenshtein算法(你可以查看它)。但這是一個讓你正常工作的毛球。

+0

改寫了這個問題 – adit

+0

增加了一些信息來回答。 –

+0

感謝您的回答,你有過使用彈性搜索或lucene的經驗嗎? – adit