Поиск строки для миллионов терминов с php - PullRequest
3 голосов
/ 09 декабря 2011

У меня есть строка, которую мне нужно найти, используя 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));
    }

Ответы [ 2 ]

1 голос
/ 22 декабря 2011

Возьмите нагрузку из PHP и передайте Mysql.

Здесь вместо поиска по PHP внутри цикла вы можете использовать функцию mysql LIKE для поиска строки.

например: ВЫБРАТЬ Город ИЗ города НРАВИТСЯ % текст поиска%

Если у вас есть больше текста для поиска, вы можете либоиспользуйте переключатель ИЛИ или JOIN sql запросов, чтобы найти их.

Это будет быстрее, и вы не потратите 60 секунд на выполнение.

Удачи

- Саджит

0 голосов
/ 09 декабря 2011

Я бы предложил следующее:

  1. Используя ассоциативные массивы, создайте две таблицы поиска: слова и термины, поэтому каждая запись должна представлять одно слово / термин
  2. Теперь вы можете осуществлять поиск через поискстолы со встроенной сложностью O(1)
...