mysql - MATCH AGAINS 和 REGEXP 的组合

标签 mysql regex

SELECT *,
       MATCH (name,
              tag) AGAINST ('keyword1 keyword2') AS accurat
FROM table_company
WHERE (name REGEXP 'keyword1 | keyword2'
       OR tag REGEXP 'keyword1 | keyword2')
  AND apg_status=1
ORDER BY accurat DESC

上面是我的搜索查询。任何人都可以告诉我这是一个好习惯吗?因为我想按单词搜索并按结果的准确性排序。

最佳答案

你拥有的东西会非常慢——ORREGEXP 都很慢;所有行都将被繁琐地扫描。

WHERE 子句中使用 MATCH... 而不是 or+regexp。

如果 MATCH 需要一些进一步的细化...(例如,MATCH 获得太多行,但是 LIKEREGEXP 可以过滤掉一些东西。)然后做

WHERE MATCH ...
  AND ((other filtering conditions))

这是有效的,因为优化器总是(?)优先执行 FULLTEXT 部分而不是其他部分。而且 FULLTEXTLIKEREGEXP很多

ORDER BY accurat DESC -- 这没问题,但您可能会质疑它选择的顺序。太糟糕了;就是这样。

旁注...如果您使用的是 InnoDB 的 FULLTEXT,则需要删除任何太短或在停用词列表中的“词”。否则 MATCH 将失败。 (这是对 MyISAM 的更改。)

关于mysql - MATCH AGAINS 和 REGEXP 的组合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33605028/

相关文章:

php - 插入批处理 codeigniter 中的非法字符串偏移

php - 修改单个 RegEx 以匹配字符串中的中间项

Java 识字文本单词解析正则表达式

jquery - Mysql 删除本地 var 部分工作的行

MySQL SUBSTRING() 使用非 utf8 编码

java - 举一个在regex java中使用cyirillic的例子

html - 用于匹配和移动 HTML 的正则表达式

c# - 带正则表达式的匹配表

mysql - 数据库分片如何工作?

php - 我如何使用数组中的值? (php)