php - 如何在字符串中搜索数千个可能的关键字

标签 php mysql performance keyword

我有一个包含数千个(大约 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/

相关文章:

php - 如何在 php、mysql 和 ajax session 中显示用户在线或离线

c++ time() 函数在 solaris 中的性能

php - 如何从 codeigniter 的 URL 中删除 Controller 名称?

php - 无权使用 Datastream 错误消息(皇家邮政运输 API)

php - 查找哪里和哪个词匹配了sql LIKE语句

mysql - 为什么使用 VARCHAR 作为名称而使用 CHAR 作为密码

android - 根据时间的昼夜主题

c# - 提高 C# 代码的性能

php - 在 PHP 中检查链式返回值的最简洁语法是什么?

php - MYSQL表变大