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

Подумайте о том, что в каталоге есть миллионы товаров, и нам нужно показать пользователю первые n наиболее релевантных результатов. Нелегко получить эти продукты в первом наборе результатов, поскольку в игру вступает множество факторов, например: атрибуты персонализации, атрибуты релевантности, атрибуты производительности, цикл обратной связи по клику / клику и т. Д., А также обеспечение высокой доступности, надежности, отказоустойчивости, эластичности системы. , минимальное время отклика.

Лучшая поисковая машина, по сути, поймет все в мире и всегда даст вам то, что нужно. И нам еще очень далеко до этого.
- Ларри Пейдж

Я начинаю эту серию статей, чтобы постоянно узнавать больше о поисковых системах, делиться своими знаниями о различных поисковых продуктах, дизайне кластеров, сравнительном анализе, дизайне приложений, ограничении скорости / правилах для предотвращения злоупотреблений и общей архитектуре. Мы сосредоточимся на построении / обсуждении базовой системы, пожалуйста, не стесняйтесь обсуждать / давать предложения.

Ни один дизайн системы не идеален, все имеет свои плюсы и минусы.

Я буду писать о подписке в следующих публикациях.

  1. Введение в формулировку проблемы поиска
  2. Создание кластера ElasticSearch с нуля
  3. Проектирование системы поиска по типу
  4. Разработка системы автозаполнения
  5. Проектирование поисковой системы
  6. Разработка приложения для поиска (это снова критически важный элемент в любой поисковой системе, так как система должна масштабироваться от начала до конца ..)

Итак, давайте начнем с:

Введение в формулировку проблемы поиска?

Начнем с вопроса «Как создать эластичный поисковый кластер с нуля».

Ниже приводится постановка задачи:

«Разработайте глобальный поиск для суперприложения, в котором пользователь должен иметь возможность искать продукты в различных вертикалях с минимальным 99-м ответом (‹ 50 мс) »

Мы будем использовать ту же постановку задачи в следующей серии статей.

Мы всегда должны придумывать обязательные, обязательные и необязательные атрибуты при разработке любой системы .

Обязательные атрибуты (базовые):

  1. Система должна быть высокодоступной.
  2. Система должна ответить в течение
  3. Система должна показывать наиболее релевантные результаты.
  4. Система должна поддерживать исправление орфографии.
  5. Система должна поддерживать понимание контекста / идентификации намерений.
  6. Отказоустойчивая, надежная, эластичная, безопасная система.
  7. Поддержка защиты системы от публичных злоупотреблений, DDoS-атак, трафика от ботов / автоматизированной системы, а также ограничение скорости, чтобы мы не тратили впустую системные ресурсы и могли обслуживать реальных пользователей.
  8. … Будем обновлять его.

Полезные атрибуты:

  1. Система может иметь поддержку от обучения до ранжирования (имеет смысл только в том случае, если система может предоставить релевантные результаты). Это позволяет относительное упорядочение результатов поиска.
  2. Персонализированный поиск.
  3. Цикл обратной связи CTR (CTR).
  4. Поддержка учета показателей производительности продуктов в поисковом рейтинге.
  5. Настройте систему статистики, чтобы увидеть, как внутренний компонент поисковой системы работает внутри, например: результаты намерения / классификации, 0 результатов, ненулевые результаты, правильность исправления орфографии и т. Д. Это очень поможет в выяснении проблем с внутренними компонентами и их улучшении.
  6. … Будем обновлять его.

Вот что мы можем рассмотреть при постановке минимальной задачи. Спасибо, что прочитали мою статью.

В следующей статье я напишу «Как спроектировать эластичный поисковый кластер с нуля» вместе с обсуждением того, как выбрать мастер, другие узлы данных, оценку емкости, сравнительный анализ, ограничение скорости в кластере es.