我試圖想出提出搜索建議的最快方法。起初,我認爲Levenstein UDF函數結合mysql表可以完成這項工作。但是使用levenshtein,mysql必須遍歷表中的每一行(噸的話),這將使查詢真的很慢。獅身人面像和「你的意思是...?」建議的想法。它的工作?
現在我最近安裝並開始使用Sphinx(http://sphinxsearch.com/)進行全文搜索,主要是因爲它的性能和與SphinxSE的緊密mysql集成。
所以我問自己,是否可以使用獅身人面像來實現一個「你的意思」算法來提高性能,我想我找到了一個簡單的方法。 基本上我把所有的關鍵字,我想糾正,把每個字母之間的空間,然後把它放在獅身人面像索引。如果這個詞是'關鍵字',它就變成'可以或不可以'。現在,當用戶輸入一個單詞時,我將它分成幾個字母,並在獅身人面像索引中搜索匹配任何提供的字母的記錄(我只需要一個)。最好的部分是獅身人面像非常適合計算匹配行的相關性(權重),所以最好的匹配總是會有最大的權重(我認爲)。它也包含單詞(在我的情況下是字母)的位置,所以最好的匹配將按照這個順序。
通過sphinx查詢,我可以在我的關鍵字列表中找到最相似的單詞。然後我使用擴展的Levenshtain距離來檢查它,這個距離佔重新排列的字母http://en.wikipedia.org/wiki/Damerau%E2%80%93Levenshtein_distance。如果字符串距離小於2(且!= 0),則建議該字。否則,不要提出任何建議。
我的想法有問題嗎?我沒有想到的東西?任何期望的獅身人面像查詢故障,以及與獅身人面像相關性計算無法給出最佳匹配的怪癖?如果我在某處出錯,請糾正我。
謝謝,當我有時間,我會進一步看看它。 – stormbreaker 2011-03-02 16:41:00