BonBonSlick
@BonBonSlick
Vanilla Full Stack Web Architector

Как выдавать результаты поиска быстрее чем GOOGLE?

Результатов: примерно 104 000 000 (0,37 сек.)
Даже с кешем локальным такого очень сложно добиться, а тут http запрос, столько результатов, Windows 10 ищет файл в система в сотни раз медленее.
Стоит еще учитывать fuzzy matching и выдачу рекомендаций помимо тех что уже найдены.

Каким образом достигнута такая скорость?
Как можно сделать еще быстрее?
  • Вопрос задан
  • 444 просмотра
Решения вопроса 2
webinar
@webinar
Учим yii: https://youtu.be/-WRMlGHLgRg
Ключевое слово "примерно". Значит расчет ведется не прямым подсчетом всех вариантов.

Windows 10 ищет файл в система в сотни раз медленее

1. Вы не сравниваете производительность своего "унитаза" и сервера гугл
2. Не сравнивайте операционку заточенную на мультифункциональность и ос созданную для поиска
3. Они юзают нейросети: https://neurohive.io/ru/papers/mnasnet-avtomatizac...

Каким образом достигнута такая скорость?

Много денег + много специалистов

Но скорость не главное, есть другие цифры. Например на 2011 год в гугл было проиндексировано около 1 квинтиллиона уникальных URL. Сейчас наверное на порядки больше.

Еще чтиво на тему: https://www.insight-it.ru/highload/2011/arkhitektu...

Там нет какой-то одной технологии с известным названием. Вы же не ожидаете увидеть ответ типа: "Так они юзают SPSQL + FastFRS сервер (причем 1)". Все намного сложнее и подробностей нет. Открывают только общие данные и старые.
Ответ написан
@stratosmi
Это вполне себе несложно реализуется:
Читайте, к примеру:
Oleg Bartunov, Alexander Korotkov
GIN Improvements
Full-text search in PostgreSQL in milliseconds
PGConf.EU-2012, Prague
https://wiki.postgresql.org/images/2/25/Full-text_...

У Google не в скорости достижение. А в адекватности получаемого результата - "релевантность" называется.
Умные нейросетки и все дела.

А только для скорости годится банальнейший FTS.
Алгоритм там примитивен, вы можете его даже на выходных для разминки реализовать.

Или просто воспользоваться готовым очень быстрым решением
sphinxsearch.com

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

Алгоритм FTS:

Подготовка:

1) Делим текст на слова
2) Отбрасываем служебные слова (предлоги и т.п.). Получаем т.н. токены.
3) Прогоняем полученные слова-токены через алгоритм стемминга snowball.tartarus.org/algorithms/russian/stemmer.html
4) Полученные слова без окончаний (называются термы) запихиваем в roaringbitmap.org
Выглядеть будет примерно так:

Исходные объекты для поиска

а) "Привет, медведь"
б) "В медведях сила"

а) -> "Привет", "медведь" -> "привет", "медвед"
б) -> "медведях", "сила" -> "медвед", "сил"

В индексе так:

"привет" 10
"медвед" 11
"сил" 01

Поиск по слову "медвед":

1) Обращаемся к индексу, получаем 11, что означется, что и в первой и во второй фразе есть интересующее нас слово.

2) Сортируем результат по релевантности
nlpx.net/archives/57 или https://ru.wikipedia.org/wiki/Okapi_BM25

Поиск по фразе "привет, медведям":

1) Идем по первому слову, получаем 10
2) Ищем по второму слову, получаем 11
3) Битая операция на пересечение результатов 10
4) Сортируем по релевантности

Как нетрудно заметить:

а) Алгоритм стемминга может и косячить
б) Релевантность вычисляется чисто механически

Но со скоростью, все же, проблем нет.

На локальном компьютере это просто не основная задача.
Сделать быстрым поиск локальный - не проблема.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
inoise
@inoise
Solutions Architect, AWS Certified, Hybrid Cloud
Вот вам все расскажут, да?) Там оптимизация на каждом шаге, начиная от CDN и программного кода, заканчивая индексацией данных и параллельными запросами к базам.
Ответ написан
usdglander
@usdglander
Yippee ki-yay
Вот в этом самом "примерно" и заключается фокус. Постоянное обновление количества страниц по каждому запросу + формирование первых несколько страниц выдачи в виде статичного html - и вот уже ответ на ваш вопрос не собирается из хранилища и отдаётся то что уже сформировано.
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
Элерон Москва
от 120 000 до 160 000 руб.
Гарда Технологии Санкт-Петербург
от 250 000 руб.
FunBox Ульяновск
от 80 000 руб.
16 июл. 2019, в 23:23
5000 руб./за проект
16 июл. 2019, в 22:43
10000 руб./за проект