Создание мгновенного полнотекстового поиска (собственный "яндекс")

autsider
На сайте с 09.06.2004
Offline
102
4675

Делаю полноценный полнотекстовый мгновенный поиск по любым документам.

Источники

  • SQL
  • NoSQL
  • База документов любой CMS
  • Файлы
  • Текстовые документы:
    • PDF
    • CSV
    • HTML
  • Внешние источники через API
  • LOG-файлы
  • и т.п

Возможные функции

  • Учет морфологии русского, английского и других языков по необходимости
  • Мгновенные поисковые подсказки по мере набора поисковой фразы
  • Картинки-превьюхи в результатах поиска
  • Картинки-превьюхи в поисковых подсказках
  • Поиск по различным категориям (например по разделам сайта или группе товаров)
  • Поиск по атрибутам документов (например параметры товара)
  • Автоматическое формирование сниппетов (выдержки из документа включающие найденные совпадения)
  • Подсветка найденных совпадений в результатах и подсказках
  • Нечеткий поиск (написание слов с ошибками)
  • Умная сортировка (вверху будут именно те документы, которые вы ожидаете)
  • Возможность тонкой настройки параметров сортировки результатов
  • API для доступа из JS, мобильного приложения, собственно откуда угодно (REST, RPC, JSON, etc).
  • В едином поиске могут быть разнородные документы - например товары, статьи, комментарии и файлы на диске.
  • В один поисковый документ можно собрать отдельные элементы - например статья и все комментарии к ней
  • Стоп-слова (по необходимости исключаются из поиска - например предлоги)
  • Масштабирование - размер индексируемой базы по сути не ограничен
  • Фронт-энд на JS
  • и т.п.

Пример мгновенного поиска на сайта https://www.autobam.ru/

с подсказками и картинками-превьюхами: http://joxi.ru/LmG4Dv7iRDXbe2?d=1

Возможные функции зависят от применяемого решения - у меня в арсенале как минимум 3 принципиально различных варианта реализации

Обновление контента в поисковой базе (индексация) может происходить по расписанию - например каждый день или каждый час, или второй вариант - мгновенное обновление при добавлении/обновлении контента (сложнее в реализации). Скорость индексации - до десятков тысяч документов в секунду (из SQL)

Минимальный бюджет: 20000 руб.

Сроки: 7-14 дней

Skype: vasiliy.a.bondarenko

Email: vabondarenko@gmail.com

png 167230.png
BeSocial.online - управление аккаунтами Инстаграм с компьютера (https://BeSocial.online/)
_
На сайте с 11.07.2008
Offline
90
#1

круто, на чем решение?

Предоставляю услуги программирования и администрирования. Бесплатная фриланс биржа (https://allfreelancers.su/)
autsider
На сайте с 09.06.2004
Offline
102
#2

Разные варианты есть.

Конкретно то что на скрине - это SQL -> Sphinx -> AngularJS

Но может быть все что угодно.

Например XML -> Filebeats -> Logstash -> Elasticsearch -> Vue.js :)

Еще пример - на "эластике" можно делать совершенно волшебные решения для мониторинга приложений и серверов. Я сейчас для себя делаю такую штуковину:

* Сбор всех событий от back-end (PHP/Laravel)

Примеры:

- Зарегистрирован пользователь email@gmail.com, ID: 999

- Пользователь email@gmail.com, ID: 999 оплатил подписку на тарифный план ххх

- Произошла фатальная ошибка file "/home/..../filename: line 999" Exception trace: .... , ошибка была у пользователя email@gmail.com, ID: 999

* Сбор всех событий front-end (SPA на Vue.js)

Примеры

- Пользователь перешел на такую-то страницу

- Пользователь нажал такую кнопку

- У пользователя email@gmail.com, ID: 999 произошла вот такая-то ошибка во время попытки сделать такое-то действие, вот что было при этом в данных и вот такое состояние имело хранилище в браузере и вот все данные пользователя

* Сбор всех метрик сервера

- Загрузка CPU

- Памяти

- Трафик по сети

- и тд и тп

В результате все это собирается в elasticsearch и на основе этого можно легко строить красивые отчеты, графики и разборы полетов. Например мы получаем автоматическое извещение (что тоже настраивается в рамках этого решения) что у пользователя произошла ошибка в браузере. Идем в интерфейс и видим что до этого он был на той странице и нажал ту кнопку - ок, видим контекст. Дальше смотрим что в это же время на сервере была такая-то ошибка и у того же пользователя. Ок, уже больше выяснили. А потом смотрим метрики сервера и обнаруживаем что например на одной из сетевых карт пропал коннект и сервер не смог связаться с внешним сервисом и поэтому произошла ошибка в PHP. И вот это уже вполне себе причина. Класс? Хотите такое? :)

Подобные решения можно просто купить как сервис - например NewRelic посмотрите. Но если там включить все что я тут описал и запустить сколько-нибудь приличный трафик - готовое решение будет стоит как частный реактивный самолет. Причем постоянно.

А как обычно происходит на большинстве сайтов? Произошла ошибка в браузере пользователя, он написал жалобу на почту в саппорт "у меня ваш сайт глючит", письмо переправили программисту (уже хорошо), но у него нет никакой возможности понять что же именно произошло и он начинает задавать пользователю странные вопросы типа "а что вы до этого делали? а какой у вас браузер? а виндоус перезагружать не пробовали?" :) вместо того чтобы просто взять имейл пользователя и через минуту видеть всю информацию о том что он делал и что у него произошло :))

В случае когда такая система мониторинга настроена пользователь после ошибки вообще может сразу "идти гулять" и ничего не писать. Админ сам видит что произошла ошибка, исправляет и пишет пользователю что все исправлено, можете пользоваться дальше. Ошарашенный таким событием пользователь скромно благодарит и становится "поклонником" вашего приложения :)

_
На сайте с 11.07.2008
Offline
90
#3

это большие системы, похожий аналог bugsnag.com там не плохая статистика

igor3310
На сайте с 27.02.2011
Offline
138
#4

А для чего сие чудо?

Оно парсит чтото

Веб разработка WordPress, OpenCart, Modx Revo и прочее - https://searchengines.guru/ru/forum/1040224
autsider
На сайте с 09.06.2004
Offline
102
#5
_gibson_:
это большие системы, похожий аналог bugsnag.com там не плохая статистика

сайт с 2000 посетителями в день по 50 событий на каждого (что очень скромно) - это 3 миллиона сообщений в месяц - 1000 долларов ежемесячно по ценам bugsnag

---------- Добавлено 10.10.2017 в 14:33 ----------

igor3310:
А для чего сие чудо?
Оно парсит чтото

ээээ.... парсит. что угодно парсит, если научить.

логи любые парсит "из коробки"

если Вы спрашиваете про парсинг сайтов - то нет, родного парсера там нет. надо отдельно писать модуль который будет собирать информацию. например пишем скриптик на PHP или Go который собирает информацию с сайта, отправляет ее в эластик, тот ее мигом индексирует и дальше делайте с ней что угодно. можно просто как хранилище использовать, но это несколько overkill. а вот если какая-то статистика-аналитика-графики-полнотекстовый поиск по данным и тп - то да, крайне полезно.

Rosno
На сайте с 28.03.2011
Offline
85
#6

Такое оформление вывода в поиске тоже возможно?

png 167436.png
autsider
На сайте с 09.06.2004
Offline
102
#7
Rosno:
Такое оформление вывода в поиске тоже возможно?

запросто!

ну не совсем так уж просто, но можно :)) и картинки и выдержки и подсветка и рубрики - все можно сделать.

собственно все кроме рубрик я уже делал тут https://www.autobam.ru/search?q=nokian (похоже штатные программисты в автобаме верстку проимели)

Rosno
На сайте с 28.03.2011
Offline
85
#8

ок, спасибо

порешаем, отпишу в личку попозже

tulik
На сайте с 01.09.2008
Offline
69
#9

Спасибо большое, Василию, за консультацию.

Задача была настроить индекс Elasticsearch. Так как таблица MySql уже весила более 12гб при 5млн записей, и таблица растет постоянно, проблема была в том что это товарная витрина и в категоризации используется масса фильтров для поиска данных, нагрузка сумашедшая, решением исправить ситуацию было использовать Elasticsearch. Но ряд моментов был не понятен так как я не использовал ранее Elasticsearch.

По проделаной работе:

- настроили правильный mapping

- настроили analyzer на руский и английский варианты поиска одновременно

- так я использовал Yii2 + Yii-Elasticseach, его стандартные методы индексировали мою таблицу около 20 часов, это с проверкой ключа на уникальность. Василий преложил решение которое ускорило этот процес в 20 раз, сейчас данный процес занимает около 1 часа).

По этому если вы испытываете проблемы с Elasticsearch и вообще вам сложно разобраться во всем этом, то добро пожаловать к Василию. Василий превратит ваши мытарства в нужный вам результат, и причем проведет консультацию в максимально скоростном режиме.

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий