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請求。
任何幫助,將不勝感激。
我以前使用http://sphinxsearch.com/相當成功(當然不是100m +記錄,但速度足夠快,我認爲它不會給你帶來問題)。您可以調整不同組件的權重以確保您獲得「正確」結果 –
'[search]'正在搜索's','e','a','r','c'或'h '。這是你的意圖嗎?我認爲'WHERE'word'就像'%search%''就足夠了(如果你想查看是否在列中存在搜索)。 – chris85
@ chris85這是有點意圖,是的。 %search%並沒有給我帶來「搜索」(比如「s34rch」)近似值的結果 - 這讓整個練習變得毫無意義,因爲這是具有levenshtein功能的目的 – egg82