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