在几秒钟内,大约有500个段落应该在名为“内容”的表格中提交到数据库中(这个数字将在几个月内超过2,500个)。 还有另一个名为“关键字”的表格,其中有超过4,000行(预计会超过10,000行)。
Keywords
+------------+-------------------+
| Keyword_id | keyword |
+------------+-------------------+
| 1 | "Venture Capital" |
| 2 | "Financing" |
+------------+-------------------+
问题是:扩展解决方案的最佳方法是将每个关键字在传入的文本段落中进行交叉引用,以查看是否存在匹配项?
因为我并不关心段落中的哪个地方有匹配(我唯一担心的是匹配);
if(preg_match()){}
可能会有效,但即使是在低端,即在搜索关键字的段落中运行2,000,000次。
另外,如果我错了,请纠正我,preg_match非常昂贵。
我想到的一个可能性是在缓存中保留一组关键字,而不是每行调用数据库。 这肯定会帮助我加快速度。
我并不关心这只是在PHP中。 如果应用程序的这一部分需要使用Python(如果我错了,请更正我,但我认为Python在解析文本时要便宜得多),那么我全都听见了。
答案 0 :(得分:0)
使用MySQL:
搜索查询:Vent Capit
SELECT * FROM keywords WHERE MATCH (keyword) AGAINST ('+Vent* +Capit*' IN BOOLEAN MODE);
如果您使用_ci
归类,(ci代表不区分大小写),匹配将忽略大写:)