2015-08-26 49 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的本地支持,建议在大数据库上进行全文搜索。