在mySQL中更有效的单词边界查询

jer*_*iuh 5 regex mysql

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

SELECT * FROM `searchIndex` WHERE `indexData` RLIKE '[[:<:]]Hirt'
Run Code Online (Sandbox Code Playgroud)

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

我希望匹配像这样的项目

"Alois M. Hirt"

"Show Biz - Al Hirt,担任新角色,......"

"Al Hirt的Sinatraville打开9 p ..."

"Hirt会玩......"

而不是"衬衫"或"十三"或"三十"等

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

如果我要为indexData添加另一个索引,那么使用的键长是多少?

TIA

Ren*_*aud 6

无需拥有FULLTEXT索引.MySQL具有字边界的特殊标记.来自MySQL文档:

[[:<:]], [[:>:]]
Run Code Online (Sandbox Code Playgroud)

这些标记代表字边界.它们分别匹配单词的开头和结尾.单词是一系列单词字符,其前面或后面没有单词字符.单词字符是alnum类中的字母数字字符或下划线(_).

mysql> SELECT 'a word a' REGEXP '[[:<:]]word[[:>:]]';   -> 1
mysql> SELECT 'a xword a' REGEXP '[[:<:]]word[[:>:]]';  -> 0
Run Code Online (Sandbox Code Playgroud)


jer*_*iuh 1

setuna的回答非常有效:

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