2

每隔几分钟,就会有大约 500 个段落被提交到名为“内容”的表中的数据库中(这个数字将在几个月内达到 2,500 多个)。还有一个名为“Keywords”的表,它有 4,000 多行(预计将增长到 10,000 多行)。

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

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

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

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

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

4

1 回答 1

0

使用 MySQL:

搜索查询:Vent Capit

使用匹配

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

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

于 2012-08-23T07:45:03.483 回答