在大量文本中查找多个关键字的最佳可扩展方式


Best scaleable way to find many keywords in a large amount of text?

每隔几分钟,就应该在一个名为"内容"的表中向数据库提交大约500个段落(几个月后这个数字将超过2500个)。还有一个名为"Keywords"的表,它有4000多行(预计将增长到10000多行)。

Keywords
+------------+-------------------+
| Keyword_id | keyword           |
+------------+-------------------+
|          1 | "Venture Capital" |
|          2 | "Financing"       |
+------------+-------------------+

问题是:在传入的文本段落中交叉引用每个关键字以查看是否匹配的情况下,扩展解决方案的最佳方法是什么

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

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

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

使用MySQL:

搜索查询:Vent Capit

使用匹配对手:

SELECT * FROM keywords WHERE MATCH (keyword) AGAINST ('+Vent* +Capit*' IN BOOLEAN MODE);

如果您使用_ci排序规则(ci表示不区分大小写),匹配将忽略大写:)