【问题标题】:Search a string for millions of terms with php使用 php 在字符串中搜索数百万个术语
【发布时间】:2012-01-16 21:25:31
【问题描述】:

我有一个字符串,我需要使用 php 搜索以查看是否存在 2-3 百万个术语。字符串可以有 1000 个字长,搜索词最多可以有 5 个字长。

我试过 strpos 和 strstr 但执行时间超过 60 秒。

谁能提出替代方案?

到目前为止,我有以下内容:

    $query = "SELECT City FROM cities";

    $result = mysql_query($query);

    if ($row = mysql_fetch_array($result)) {
        do {

            $city = " " . $row['City'] . " ";

            if(strpos($string, $city)!== False) {
                echo $city . "<br />\n";
                }

        } while ($row = mysql_fetch_array($result));
    }

【问题讨论】:

  • 条款存储在哪里?它们是否在数据库中并且您正在查询它们?
  • 也许添加更多关于你想要做什么而不是你如何做的信息。
  • 我添加了更多细节。
  • 您将全文搜索添加为标签。但是,你为什么不这样做???
  • 为什么要从数据库中加载数据并在 PHP 中执行搜索?一百万个这样大小的条目很可能会占用 200 多兆的内存来在 PHP 中存储这样的数组。然后,您依次遍历每条记录并执行“搜索”。当然慢!使用您的数据库过滤掉结果,这就是它的用途。

标签: php string search


【解决方案1】:

从 PHP 中获取负载并交给 Mysql。

这里不是在循环中使用 PHP 进行搜索,而是可以使用 mysql LIKE 函数来搜索字符串。

例如:SELECT 城市 FROM 城市 LIKE %search text%

如果您有更多搜索文本,您可以使用 OR 开关或 JOIN sql 查询来查找这些文本。

这会更快,而且执行时间不会超过 60 秒。

祝你好运

-- 萨吉特

【讨论】:

    【解决方案2】:

    我建议如下:

    1. 使用关联数组创建两个查找表:单词和术语,因此每个条目应代表单个单词/术语
    2. 现在您可以搜索具有内置复杂性的查找表O(1)

    【讨论】:

    • 不幸的是,虽然我在表格中有城市,但我无法将字符串放入数组中,因为有些城市超过 1 个单词。
    • @TomH 但它们是否被空格以外的东西隔开?
    • 没有。例如,如果我将所有字符串分解为单词,则 'Las Vegas' 将不匹配,因为 'las' 和 'vegas' 将位于单独的记录中。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-19
    • 2014-11-25
    • 1970-01-01
    相关资源
    最近更新 更多