我有一个包含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/