1

我有搜索功能,可以在大型 mysql 表中搜索关键字,但由于我需要过滤掉所有坏词,我必须在 MySQL 中进行以下类型的 AND 比较,这是一长串禁用词(超过 500+),因此它非常慢,

SELECT * FROM keywords WHERE 1  
    AND keyword NOT LIKE '%love%'
    AND keyword NOT LIKE '%hope%'
    AND keyword NOT LIKE '%caring%'
    AND keyword NOT LIKE '%x%'
    AND keyword NOT LIKE '%happiness%'
    AND keyword NOT LIKE '%forgiveness%'
    AND keyword NOT LIKE '%good%'
    AND keyword NOT LIKE '%great%'
    AND keyword NOT LIKE '%positive%'
    AND keyword NOT LIKE '%sharing%'
    AND keyword NOT LIKE '%awesome%'
    AND keyword NOT LIKE '%fantastic%' 

还有其他更好的方法吗?

4

2 回答 2

2

使用LIKE模式匹配的性能很差,因为没有办法为它使用索引。使用像@fuzic 这样的正则表达式建议更糟糕。

如果您想要良好的性能,您确实需要使用一些全文索引解决方案。

我在我的演示文稿Full Text Search Throwdown中对此进行了介绍并比较了几种解决方案。


简短的回答:使用Sphinx Search

于 2013-03-13T03:26:10.450 回答
0

您可能比构建一个识别完整字符串集的有限状态机做得更糟。手动编写代码会很乏味,但幸运的是,诸如 LEX 及其后代和亲属之类的工具已经存在了近 40 年,以使该过程自动化。

于 2013-03-13T03:35:27.820 回答