在mySQL中更高效的词边界查询



我有一个包含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的回答非常有效:

SELECT * FROM searchIndex WHERE MATCH (indexData) AGAINST (' t*' IN BOOLEAN MODE);

最新更新