2015-08-26 94 views
1

我有一個擁有超過1億條記錄(並迅速增長)的數據庫,我想實現一個按照最接近結果排序的搜索功能。 我做了一些研究,發現全文搜索只是前綴,這不是我想要的。

我得到的結果足夠接近,稱之爲好,但問題是查詢速度很慢。

的萊文斯坦功能就是從這裏開始:http://www.artfulsoftware.com/infotree/qrytip.php?id=552MySQL全文/正則表達式/ levenshtein搜索優化

這裏的查詢:

SELECT `id`, 
     `word`, 
     MATCH (`word`) AGAINST ('+*search*') IN BOOLEAN MODE) AS `match` 
FROM `words` 
WHERE `word` REGEXP '^.*[search].*$' 
    AND levenshtein(`word`, 'search') <= 2 
ORDER BY levenshtein(`word`, 'search'), `match` ASC 
LIMIT 10; 

因此,總體而言,結果是相當接近,但它需要幾分鐘,但要完成搜索,這實在是不我每次按下某個鍵時所需的內容我發送一個jQuery AJAX請求。

任何幫助,將不勝感激。

+0

我以前使用http://sphinxsearch.com/相當成功(當然不是100m +記錄,但速度足夠快,我認爲它不會給你帶來問題)。您可以調整不同組件的權重以確保您獲得「正確」結果 –

+0

'[search]'正在搜索's','e','a','r','c'或'h '。這是你的意圖嗎?我認爲'WHERE'word'就像'%search%''就足夠了(如果你想查看是否在列中存在搜索)。 – chris85

+0

@ chris85這是有點意圖,是的。 %search%並沒有給我帶來「搜索」(比如「s34rch」)近似值的結果 - 這讓整個練習變得毫無意義,因爲這是具有levenshtein功能的目的 – egg82

回答

0

作爲@RobGudgeon建議使用​​結束。雖然不是MySQL(而是自己的另一個數據庫),但是從MySQL更新和在自己的數據庫中搜索實際上都非常快。由於目前缺乏MySQL的本地支持,建議在大數據庫上進行全文搜索。