Поиск фраз с помощью mysql и php

Я работаю над проектом, и мне нужны ваши предложения в запросе к базе данных. Я использую PHP и MySQL.

Контекст

  • У меня есть таблица с именем phrases, содержащая столбец phrases, в котором хранятся фразы, каждая из которых состоит из одного-трех слов.
  • У меня есть строка text, содержащая 500-1000 слов.

Мне нужно выделить все фразы в строке text, которые существуют в моей таблице базы данных phrases.

Мое решение

Я просматриваю каждую фразу в списке фраз и сравниваю ее с text, но количество фраз велико (100 тыс.), поэтому на это сопоставление уходит около 2 минут или больше.

Есть ли более эффективный способ сделать это?


person ahsan3123    schedule 01.01.2015    source источник
comment
Не могли бы вы предварительно сопоставить текст и кэшировать его где-нибудь раньше времени? Тогда пользователь не будет чувствовать себя медленным.   -  person phansen    schedule 01.01.2015


Ответы (1)


Я сосредоточусь на том, как выполнить сравнительную часть со значениями 100 000. Для этого потребуется два шага.

а) Напишите библиотеку C++ и свяжите ее с PHP с помощью расширения. Google PHP-CPP. Есть фреймворк, который позволяет это сделать.

б) Внутри C/C++ вам нужно создать структуру данных, которая имеет временную сложность O(n) . n — длина фраз, которые вы ищете. Обычно это называется структурой данных trys. Это обычно используется для слов без пробела [не фраз]. но, конечно, вы можете написать свой собственный.

Вот ссылка, которая содержит слово «реализация». он же словарь. http://www.geeksforgeeks.org/trie-insert-and-search/

Это занимает довольно много памяти, так как число равно 100 КБ. честно говоря, вам нужна большая система. Но когда вы ищете лучшую производительность, тогда память, как правило, является компромиссом.

Альтернативный подход Только PHP. Здесь извлеките фразы из введенного текста. Преобразуйте их в хеш. данные таблицы, которые вы содержите, также должны храниться в хеше. [Требуется огромный объем памяти]. Производительность здесь будет ракетно-быстрой, на поиск, также известный как O (1). Итак, для предложения из k слов. ваша временная сложность будет O (K-factorial).

person Umashankar Das    schedule 20.08.2015