gpt4 book ai didi

mysql - MATCH AGAINS 和 REGEXP 的组合

转载 作者:行者123 更新时间:2023-11-28 23:45:50 24 4
gpt4 key购买 nike

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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com