我有一个包含1/2万个短语的表,并且正在使用此查询进行单词匹配:

SELECT * FROM `searchIndex` WHERE `indexData` RLIKE '[[:<:]]Hirt'

indexData字段具有FULLTEXT索引,并且数据类型为longtext。

我想搭配以下物品

“Alois M. Hirt”

“以新角色出演Biz-Al Hirt,...”

“Al Hirt的Sinatraville打开9 p ...”

“希特勒将在比赛中……”

而不是在“衬衫”或“十三”或“三十”等上

查询成功,但是通常需要3秒才能返回,我想知道是否有更好,更有效的方法来进行单词边界匹配?

如果我要向indexData添加另一个索引,将使用什么正确的 key 长度?

TIA

最佳答案

不需要FULLTEXT索引。 MySQL对单词边界具有特殊标记。从MySQL doc:

[[:<:]], [[:>:]]

这些标记代表单词边界。它们分别与单词的开头和结尾匹配。单词是单词字符的序列,不能在单词字符之前或之后。单词字符是alnum类中的字母数字字符或下划线(_)。
mysql> SELECT 'a word a' REGEXP '[[:<:]]word[[:>:]]';   -> 1
mysql> SELECT 'a xword a' REGEXP '[[:<:]]word[[:>:]]';  -> 0

关于mysql - 在MySQL中更有效的词边界查询,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7261496/

10-09 18:00
查看更多