MySQL数据库中使用PHP(或查询)的数千行常用词


Common words used over thousands of row in MySQL Database using PHP (or query)

我有一个MySQL数据库,它有大量的记录。对于每条记录,都有一个名为"Comment"的文本字段,我在下面举了3个例子:

  • "付款很快,谢谢。"
  • "爱你,谢谢你"
  • "快速交付,谢谢"

我的问题是:

我如何查询每条记录?查看"注释"字段的内容,然后计算出使用的前20个单词是什么

例如,使用单词上方的3条注释

  • "谢谢"出现3次
  • "快速"2次
  • 其余的单词只使用一次

我猜我需要使用PHP来处理每个记录,使用"(空格)进行分解,删除逗号之类的字符;句号,然后存储结果,然后计数。

但我真的不确定最好的方法,也不知道如何处理复数,比如"谢谢"&"谢谢"。因此出现了以下问题:)

Matt

因为它们都在同一列中,所以在这里不能进行太多SQL过滤。

如果数据集不是太大(即php内存不足),那么您应该能够将其读取到php中并进行处理

您可以使用explode来分割空间,并将数据作为一个巨大的数组来处理。您可以使用preg_match函数进行字符串比较操作,请参阅:http://us3.php.net/preg_match-您应该花一些时间研究正则表达式。

如果您正在查找SELECT COUNT(comment)之类的特定内容,其中的注释类似于"%谢谢%",那么在where子句中使用SQL like函数会更容易,但您必须手动执行。

此外,您可能需要考虑将其转储到一个文件中,并使用基于unix的命令,如wc,这可以帮助您完成所需的任务。如果您在类似unix的环境中,也可以使用PHP与这些命令进行交互。

除了写代码,我没有什么可以告诉你的了。

可能。然而,MySQL对于这种类型的查询并不是很好。如果你确实尝试过使用MySQL,那么实际完成可能需要很长时间,如果你想经常运行这种类型的查询,这将是不现实的。

我建议您考虑使用专门为这类查询设计的东西来索引数据。某种ApacheLucene衍生产品会做得很好,例如,您可以使用Elasticsearch。以下是ES的文档,描述了您希望运行的查询类型:http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/search-facets-terms-facet.html

与MySQL不同的是,在ES这样的平台上运行这些查询会执行得非常快,因为它是专门为它设计的