【发布时间】:2011-08-31 18:16:24
【问题描述】:
我有一个包含 1/2 百万个短语的表,我正在使用此查询进行单词匹配:
SELECT * FROM `searchIndex` WHERE `indexData` RLIKE '[[:<:]]Hirt'
indexData 字段有一个 FULLTEXT 索引并且是长文本数据类型。
我想匹配类似的项目
“阿洛伊斯·M·赫特”
“Show Biz - Al Hirt,在一个新角色中,......”
“Al Hirt 的 Sinatraville 晚上 9 点开放...”
“Hirt 正在播放...”
而不是“衬衫”或“十三”或“三十”等。
查询成功,但通常需要 3 秒才能返回,我想知道是否有更好、更有效的方法来进行这个词边界匹配?
如果我要向 indexData 添加另一个索引,正确的 keylength 应该是多少?
TIA
【问题讨论】:
-
尝试使用 FULLTEXT 搜索先跟正则表达式
-
SELECT * FROM
searchIndexWHERE MATCH (indexData) 反对(布尔模式下的'Hirt*'); -
谢谢setsuna!该客户现在有一名内部开发人员。我已经把这个传给他了。
-
@jerrygarciuh 如果这个问题已经得到解答,那么您应该自己给出答案,或者完全删除它。
-
我有类似的问题,但在我的情况下,短语也可能是多词。在正则表达式检查之前添加一个类似检查 (... LIKE '%phrase%' AND ...) 可以大大提高速度(因此只有在文章中有短语时才检查正则表达式)。