Как лучше всего организовать поиск в тексте на сайте?

Добрый день. Разрабатываю проект на Yii2, основной целью которого является парсинг сайтов и поиск там определенных фраз/слов. Но не всё так просто.

Идея в следующем: пользователь вводит слово для мониторинга. После чего задача добавляется в cron и сайт парсит определенный набор сайтов и пытается найти вхождения этих слов в тексте. Первую часть, а именно парсинг сайтов, получилось сделать. А вот с поиском проблема. Не знаю как его правильно организовать. Текст для поиска обычно 500+ слов, а периодичность парсинга 30 минут - 1 час.

Просто искать оператором LIKE не подходит. Начал изучать полнотекстовый поиск и различные движки для него, такие как TntSearch (обертка для yii2), ElasticSearch, Sphinx и т.д. И вроде бы это как раз то, что мне нужно. Но проблема в том, что они все работают с бд, а мне, возможно, не имеет смысла заносить все спарсенные текста в базу, а потом искать, после чего ещё и удалять ненужные текста. Будет постоянное переписывание индексов, слишком большая нагрузка (возможно).

На этот счет было пару мыслей:
  1. Попытаться делать поиск в момент парсинга. То есть я получил текст с сайта, затем каким то образом выполнил поиск по этому тексту (не ясно как). И в случае, если в этом тексте есть упоминания искомого слова/фразы, то заносить в базу. Но в этом случае процесс становится очень долгим, т.к. все происходит за раз (парсинг и поиск).
  2. Либо разделить действия парсинга и поиска. То есть я спарсил некоторый объем данных, занёс их в таблицу (либо создать буферную таблицу, либо сразу в основную в определенной меткой). И уже потом делаю поиск с помощью вышеупомянутых TntSearch, ElasticSearch и т.д. Но не будет ли излишними в этом случае эти движки?


Хочется найти нечто простое, пока что штуки вроде Sphinx пугают и кажутся избыточными для такой простой задачи. Как бы вы реализовывали подобную систему, пожалуйста поделитесь своим мнением, спасибо!
  • Вопрос задан
  • 199 просмотров
Решения вопроса 1
BojackHorseman
@BojackHorseman Куратор тега PHP
...в творческом отпуске...
То есть я получил текст с сайта, затем каким то образом выполнил поиск по этому тексту (не ясно как).


а никак. чтобы этот поиск выполнить и нужно построить индексы. вся суть полнотекстовых движков в их (индексах) построении.

Будет постоянное переписывание индексов, слишком большая нагрузка (возможно).


будет. но это задача в своей постановке попроще нечеткого поиска
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
anton_reut
@anton_reut
Начинающий веб-разработчик
"То есть я получил текст с сайта" - и где в этот момент живет этот текст? В некой временной tmp переменной? Мне кажется нет разницы хранить инфу для поиска во временном файле или в базе - всё равно тебе надо где то её иметь.
Ответ написан
ThunderCat
@ThunderCat Куратор тега PHP
{PHP, MySql, HTML, JS, CSS} developer
Просто искать оператором LIKE не подходит.
...
мне, возможно, не имеет смысла заносить все спарсенные текста в базу,
Так вы их вносите или нет?

Просто и быстро - при парсинге полученный текст сразу проверять на совпадения нужных слов через substr() или preg_match() (в зависимости от задачи), далее по требованиям - записать в бд что нашли и где(если это нужно для оповещения) или только оповестить пользователя.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы