Php 在大量文本中查找多个关键字的最佳可伸缩方式?

Php 在大量文本中查找多个关键字的最佳可伸缩方式?,php,Php,每隔几分钟,大约500个段落就会被提交到数据库中一个名为“Content”的表格中(这个数字在几个月内将超过2500个)。 还有另一个名为“关键字”的表,它有4000多行(预计将增长到10000多行) 问题是:当每个关键字在输入的文本段落中交叉引用以查看是否存在匹配项时,扩展解决方案的最佳方式是什么? 因为我不关心段落中哪里有匹配(我唯一关心的是有匹配); if(preg_match()){}可能有效,但即使是在低端,也有2000000次你在一个段落中搜索关键字。 另外,如果我错了,请纠正我,p

每隔几分钟,大约500个段落就会被提交到数据库中一个名为“Content”的表格中(这个数字在几个月内将超过2500个)。 还有另一个名为“关键字”的表,它有4000多行(预计将增长到10000多行)

问题是:当每个关键字在输入的文本段落中交叉引用以查看是否存在匹配项时,扩展解决方案的最佳方式是什么?

因为我不关心段落中哪里有匹配(我唯一关心的是有匹配);
if(preg_match()){}
可能有效,但即使是在低端,也有2000000次你在一个段落中搜索关键字。 另外,如果我错了,请纠正我,preg_match相当昂贵

我想到的一个可能性是在缓存中保留一个关键字数组,而不必为每一行调用DB。 我想这肯定会有助于加快速度

我不关心这仅仅是在PHP中。 如果应用程序的这一部分需要使用Python(如果我错了,请纠正我,但我听说Python在解析文本方面要便宜得多),那么我会洗耳恭听。

使用MySQL:

搜索查询:
Vent Capit

使用:

如果您使用的是ci排序规则(ci代表不区分大小写),那么匹配将忽略大写:)

与MySQL:

搜索查询:
Vent Capit

使用:


如果您使用的是
\u ci
排序规则(ci代表不区分大小写),那么匹配将忽略大小写:)

为什么不直接使用DB呢?很多RDBMS都有很强的全文功能,而且做起来很快……嗯,很有趣。既然我不是DB专家,那会不会像mysql中的'like'语句那样呢?如果我远在天边,我向你道歉;我总是更多地处理php方面的事情,而不是DB。为什么不直接使用DB呢?很多RDBMS都有很强的全文功能,而且做起来很快……嗯,很有趣。既然我不是DB专家,那会不会像mysql中的'like'语句那样呢?如果我远在天边,我向你道歉;我总是更多地处理php方面的事情,而不是DB方面的事情。这会比使用preg_match()从数组运行脚本快得多吗?我之所以问这个问题是因为(如果我错了,请纠正我)扩展计算(比如使用amazon)不是非常容易,而是很难将数据库扩展到40000000次查询/几分钟?基本上:速度值不值得为无法轻松扩展而付出的代价吗?几天后,通过一些速度测试,我可以确认,与通过preg_match()解析文本相比,这大体上是正确的答案。虽然我不确定这种方式从长远来看是否具有可扩展性,但它现在应该已经足够了。随着时间的推移,我会更新这个,让你(和其他人)知道它是如何进行的。谢谢。这会比使用preg_match()从数组运行脚本快得多吗?我之所以问这个问题是因为(如果我错了,请纠正我)扩展计算(比如使用amazon)不是非常容易,而是很难将数据库扩展到40000000次查询/几分钟?基本上:速度值不值得为无法轻松扩展而付出的代价吗?几天后,通过一些速度测试,我可以确认,与通过preg_match()解析文本相比,这大体上是正确的答案。虽然我不确定这种方式从长远来看是否具有可扩展性,但它现在应该已经足够了。随着时间的推移,我会更新这个,让你(和其他人)知道它是如何进行的。谢谢
Keywords
+------------+-------------------+
| Keyword_id | keyword           |
+------------+-------------------+
|          1 | "Venture Capital" |
|          2 | "Financing"       |
+------------+-------------------+
SELECT * FROM keywords WHERE MATCH (keyword) AGAINST ('+Vent* +Capit*' IN BOOLEAN MODE);