Php MySQL全文/regexp/levenshtein搜索优化

Php MySQL全文/regexp/levenshtein搜索优化,php,mysql,optimization,full-text-search,Php,Mysql,Optimization,Full Text Search,我有一个1亿多条记录的数据库(而且还在快速增长),我想实现一个搜索功能,它可以根据最接近的结果进行排序。 我做了一些研究,发现全文搜索只是前缀,这并不是我真正想要的。 我得到的结果非常接近,可以说是好的,但问题是查询速度非常慢。 levenshtein函数如下所示: 问题是: SELECT `id`, `word`, MATCH (`word`) AGAINST ('+*search*') IN BOOLEAN MODE) AS `match` FROM

我有一个1亿多条记录的数据库(而且还在快速增长),我想实现一个搜索功能,它可以根据最接近的结果进行排序。 我做了一些研究,发现全文搜索只是前缀,这并不是我真正想要的。

我得到的结果非常接近,可以说是好的,但问题是查询速度非常慢。

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;
选择'id`,
`字`,
将(`word`)与('+*search*')在布尔模式下匹配为`MATCH`
来自“单词”
其中`word`REGEXP'^.[search].$

levenshtein('word','search')我最终使用@RobGudgeon建议的方法。虽然不是MySQL(以及它自己的另一个数据库),但它实际上在从MySQL更新和在它自己的数据库中搜索两方面都非常快。建议在大型数据库上进行全文搜索,因为MySQL目前缺乏本机支持。

我最后使用@RobGudgeon建议的方法。虽然不是MySQL(以及它自己的另一个数据库),但它实际上在从MySQL更新和在它自己的数据库中搜索两方面都非常快。建议在大型数据库上进行全文搜索,因为MySQL目前缺乏本机支持。

我过去使用过非常成功(当然不是针对100多万条记录,但速度足够快,我认为不会给你带来问题)。您可以调整不同组件的权重,以确保获得“正确”的结果
[search]
正在搜索
s
e
a
r
c
h
。这是你的意图吗?我认为
其中像“%search%”这样的“word”就足够了(如果您只是想看看
search
是否出现在列中)。@chris85这就是我们的意图,是的search%没有给我类似于“search”(如“s34rch”)的结果——这使得整个练习变得毫无意义,因为这就是levenshtein的目的function@RobGudgeon我开始调查斯芬克斯的搜索。看起来这正是我想要的,但我也不想因为需要更新两个数据库而在服务器上造成更多的负载。保持sphinx索引最新的cronjob非常快&不应该导致您的服务器在过去非常成功地使用(无可否认,这并不适用于超过100万条记录,但速度足够快,我认为这不会给您带来任何问题)。您可以调整不同组件的权重,以确保获得“正确”的结果
[搜索]
正在搜索
s
e
a
r
c
,或
h
。这是你的意图吗?我想
像“%search%”这样的“word”就足够了(如果你只是想看看列中是否有
search
).@chris85这是我的初衷,是的。%search%没有给我类似于“search”(如“s34rch”)的结果-这使得整个练习变得毫无意义,因为这就是levenshtein的目的function@RobGudgeon我开始研究sphinx搜索。看起来这就是我要寻找的,但我也不想因为需要更新两个数据库而在服务器上造成更多负载。保持sphinx索引最新的cronjob是非常快&不会给服务器带来太多麻烦