我有一个包含50万个短语的表,我正在使用这个查询进行单词匹配:
SELECT * FROM `searchIndex` WHERE `indexData` RLIKE '[[:<:]]Hirt'
indexData字段有一个FULLTEXT索引,数据类型是longtext。
我想匹配像
这样的项《阿洛伊斯·m·赫特》
"娱乐圈- Al Hirt,在一个新的角色,…"
"Al Hirt's Sinatraville下午9点开业……"
"Hirt将会演奏…"
而不是"shirt"或"thirteen"或"thirty"等
查询是成功的,但它经常需要3秒返回,我想知道是否有一个更好的,更有效的方式来做这个词边界匹配?
如果我要添加另一个索引indexData什么将是正确的键长使用?
TIA
不需要FULLTEXT索引。MySQL为单词边界提供了特殊标记。从MySQL文档:
[[:<:]], [[:>:]]
这些标记代表单词边界。它们分别匹配单词的开头和结尾。单词是一个单词字符序列,它的前面或后面没有单词字符。单词字符是alnum类中的字母数字字符或下划线(_)。
mysql> SELECT 'a word a' REGEXP '[[:<:]]word[[:>:]]'; -> 1
mysql> SELECT 'a xword a' REGEXP '[[:<:]]word[[:>:]]'; -> 0
setsuna的回答非常有效: