【问题标题】:Find phrases using mysql and php使用 mysql 和 php 查找短语
【发布时间】:2015-02-28 02:09:01
【问题描述】:

我正在做一个项目,我需要您在数据库查询中提出建议。我正在使用 PHP 和 MySQL。

上下文

  • 我有一个名为 phrases 的表,其中包含一个 phrases 列,其中存储了短语,每个短语由一到三个单词组成。
  • 我有一个 text 字符串,其中包含 500 - 1000 个单词

我需要突出显示存在于我的phrases 数据库表中的text 字符串中的所有短语。

我的解决方案

我检查了短语列表中的每个短语,并将其与text 进行比较,但短语的数量很大(100k),因此完成此匹配大约需要 2 分钟或更长时间。

有没有更有效的方法?

【问题讨论】:

  • 您可以预先匹配文本并提前将其缓存在某个地方吗?这样用户就不会觉得慢了。

标签: php mysql search full-text-search phrases


【解决方案1】:

我将重点介绍如何使用 100K 值进行比较部分。这需要两个步骤。

a) 编写一个 C++ 库并使用扩展将其链接到 PHP。谷歌 PHP-CPP。有一个框架可以让你做到这一点。

b) 在 C/C++ 中,您需要创建一个时间复杂度为 O(n) 的数据结构。 n 是您要搜索的短语的长度。通常,这称为尝试数据结构。这通常用于没有空格的单词[不是短语]。但是,您当然可以自己编写。

这是一个链接,其中包含单词 implementation。又名字典。 http://www.geeksforgeeks.org/trie-insert-and-search/

这需要相当多的内存,因为这个数字是 100K。公平地说,您需要一个大型系统。但是,当您寻求更好的性能时,内存往往是一种权衡。

替代方法 只有 PHP。在这里,从您的文本输入中提取短语。将它们转换为哈希。您包含的表数据也应该存储在哈希中。 [需要巨大的内存]。这里的性能将是火箭般的快速,每次搜索也就是 O(1)。所以,对于一个有 k 个单词的句子。您的时间复杂度将是 O(K-factorial)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-12
    • 2013-10-26
    • 1970-01-01
    • 2011-06-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多