我有一个包含数千个(大约 10,000 个)关键字的数据库。当用户在我的网站上发布博客时,我想自动搜索文本中的关键字,并使用任何直接匹配标记帖子。
到目前为止,我能想到的就是拉出整个关键字列表,遍历它,并检查帖子中是否存在每个标签……这似乎非常低效(即 10,000 次循环)。
有没有更通用的方法来做到这一点?我是否应该使用 MySQL 查询来限制它?
我想这不是一项完全罕见的任务。
最佳答案
不,只是不要那样做。
与其遍历 10000 个元素,不如从句子或文本中提取单词,然后将其添加到 SQL 查询中,这样您将拥有所有需要的记录。这肯定比您提出的解决方案更有效。
您可以使用 PHP 通过以下方式执行此操作:
$possible_keywords = preg_split('/\b/', $your_text, PREG_SPLIT_NO_EMPTY);
上面的代码将在单词的边界上拆分文本,并且不会返回数组中的空元素。
然后您就可以按照类似于以下的方式创建 SQL 查询:
SELECT * FROM `keywords` WHERE `keywords`.`keyword` IN (...)
(只需将以逗号分隔的提取词列表放在括号中)
您可能应该在进行查询之前过滤 $possible_keywords
数组(以仅包括具有适当长度的关键字并排除重复项)并为 keyword
列建立索引。
关于php - 如何在字符串中搜索数千个可能的关键字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6143670/