Algolia

Материал из Национальной библиотеки им. Н. Э. Баумана
Последнее изменение этой страницы: 19:23, 7 июня 2020.
Algolia
Algolialogo.png
Создатели: Николя Дессанж, Жюльен Лемуан
Разработчики: Algolia
Состояние разработки: Активна
Написана на: C++
Платформа: x86-64 (Intel Xeon E5–1650v4)
Тип ПО: Поиск и поисковой индекс
Лицензия: SaaS, Open-source
Веб-сайт www.algolia.com

Algolia - поисковая система одноимённой американской стартап-компании, предлагающей решения для веб-поиска по модели SaaS (программное обеспечение как услуга). Algolia была создана в 2012 году Николя Дессанжем и Жюльеном Лемуаном во Франции. Изначально проект специализировался на offline-поиске в мобильных телефонах. По состоянию на 2020 год Algolia работает примерно в 70 центрах обработки данных в 17 регионах мира[Источник 1][Источник 2].

Что предлагает Algolia

Algolia состоит из реализации поиска и поисковой аналитики. Основная цель движка состоит в том, чтобы найти все записи, соответствующие запросу, затем упорядочить их по релевантности. Algolia использует алгоритм разрыва связей с различными критериями для взвешивания и сравнения совпадающих элементов друг с другом. Это гарантирует, что наиболее точные совпадения появятся в первую очередь. Также поисковые запросы всегда имеют приоритет над операциями индексирования, для обеспечения скорости работы.

Для разработчиков

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

  • функциональную панель мониторинга для управления данными и конфигурациями;
  • API-клиенты для 11 языков (PHP, Ruby, JavaScript, Python, C#, Java, Golang, Scala, Kotlin, также поддерживаются две мобильные платформы: iOS и Android).
  • набор интерфейсных библиотек под названием InstantSearch, которые помогают реализовать поиск на веб-сайте (vanilla JavaScript, React, Vue, Angular) или в мобильном приложении (iOS, Android);
  • интеграция для фреймворков, включая: Laravel, Symfony, Django и Rails;
  • расширения для Magento 1, Magento 2, Shopify, WordPress, Zendesk и Jekyll;
  • автоматизированный краулер для извлечения контента из нескольких сайтов и отправки его в Algolia;
  • безопасная распределенная поисковая сеть, которая размещает контент и быстро обрабатывает его;
  • настраиваемый алгоритм релевантности;
  • сильно оптимизированная поисковая система, построенная на языке C++.

Для проекта

Algolia предоставляет панель мониторинга, которая позволяет настроить поиск и просматривать аналитику поиска без какого-либо написания кода, продвигать определённые продукты, просматривать аналитику кликов и конверсий, на какие материалы нажали пользователи, а также что им понравилось, с каких устройств это было сделано и из каких стран.

Аналитика

Сбор поисковых данных не требует дополнительных усилий и программирования со стороны клиента, в фоновом режиме Algolia собирает большие объемы информации, связанные с поиском:

  • общее количество поисковых запросов;
  • список "поиск не дал результатов”;
  • топ запросов;
  • топ запросов без результатов;
  • топ результатов;
  • если предусмотрен фильтр, то с этим фильтром связан топ запросов;
  • топ фильтров- атрибутов и значения фильтров;
  • количество уникальных IP-адресов / пользователей;
  • топ по странам.

Как утверждает Algolia, сбор этих данных никак не влияет на скорость поиска. Аналитика появляется в панели мониторинга примерно через 10 минут после возникновения, каждая метрика наглядно продемонстрирована. Кроме того корпоративные клиенты могут использовать API REST analytics для получения результатов аналитической службы поиска для составления отчетов.

Для потребителя

Algolia предоставляет пользователям поисковый интерфейс с богатым набором функций: может содержать строку поиска, фильтры, бесконечную прокрутку, предложения запросов, сортировку, уточнения. [Источник 3]

Инфраструктура

Кластеры

Algolia использует "трёхсерверную архитектуру", называемую кластером. Кластер Algolia - это набор из трех серверов, "сгруппированных" вместе для обработки всех запросов, который действует как один. Все серверы равны, то есть каждый из них одинаково способен отвечать на любой запрос. Чтобы это было возможно, каждый сервер должен иметь одинаковые параметры данных и индексов, а также одинаковую общую конфигурацию системы, что позволяет кластеру вести себя как единый сервер. Причиной возникновения кластеров является избыточность: если один или два сервера выходят из строя, служба все еще доступна.

Algolia имеет более 400 кластеров в 17 регионах и 70 центров обработки данных:

  1. США-Восток (Вирджиния): два центра обработки данных Equinix в Эшберне и COPT DC-6 в Манассасе (три независимые автономные системы).
  2. США-Запад (Калифорния): три центра обработки данных Equinix в Сан-Хосе (три независимые автономные системы).
  3. США-Центр (Техас): два центра обработки данных в Далласе (две независимые автономные системы).
  4. Европа (Франция): четыре центра обработки данных в Рубе, два различных центра обработки данных в Страсбурге и один центр обработки данных в Гравелине.
  5. Европа (Нидерланды): четыре центра обработки данных вокруг Амстердама.
  6. Европа (Германия): семь центров обработки данных в Фалькенштейне и один центр обработки данных во Франкфурте (две независимые автономные системы).
  7. Европа (Великобритания): два центра обработки данных в Лондоне (две независимые автономные системы).
  8. Канада: четыре центра обработки данных в Богарнуа.
  9. Ближний Восток: один центр обработки данных в Дубае.
  10. Сингапур: два дата-центра в Сингапуре (две независимые автономные системы).
  11. Бразилия: три центра обработки данных вокруг Сан-Паулу (две независимые автономные системы).
  12. Япония: один центр обработки данных в Токио и один центр обработки данных в Осаке.
  13. Австралия: три центра обработки данных в Сиднее (две независимые автономные системы).
  14. Индия: один центр обработки данных в Нойде.
  15. Гонконг: два разных центра обработки данных (две независимые автономные системы).
  16. Южная Африка: два центра обработки данных в Йоханнесбурге (две независимые автономные системы).


Так как Algolia предоставляет поиск, то все её клиенты используют одни и те же функции, что позволяет отказаться от виртуализации, а это увеличивает скорость работы. Многие крупные клиенты используют выделенные серверы и им предоставлен доступ ко всему кластеру. Большинство учетных записей имеют общие серверы, что означает, что они используют один и тот же движок Algolia. Однако в обеих ситуациях принцип работы один и тот же: Algolia работает непосредственно на машине. Используются высокочастотные процессоры, такие как Intel Xeon E5–1650v4 с частотой 3,9 ГГц, с 256 ГБ оперативной памяти[Источник 4].

Кластеры требуют надежного алгоритма для взаимосвязи, чтобы гарантировать, что каждый сервер содержит одни и те же данные в любое время, без прерывания обслуживания, используется алгоритм – RAFT, который координирует все входные данные (добавление, обновление и удаление индексных данных) так, чтобы все машины в кластере обновлялись одновременно. Когда серверы используют один и тот же центр обработки данных или одни и те же линии электропередач, однократное наводнение или отключение электроэнергии может привести к разрушению всего кластера. Таким образом, чтобы обеспечить надежность кластера, Algolia разделили серверы таким образом, чтобы ни один инцидент не мог привести к разрушению всего кластера. Algolia предоставляет инструмент для отслеживания своих серверов и кластеров с помощью панели мониторинга (в разделе Мониторинг -> состояние). При создании учетной записи можно выбрать, какой регион клиент хочет использовать. Кроме того, можно использовать функцию DSN для распространения поисковой системы в нескольких регионах и уменьшения задержки для аудитории в разных частях мира [Источник 5].

DSN

Распределенная поисковая сеть Algolia (DSN) добавляет один или несколько спутниковых серверов в кластер. Это расширяет охват кластера Algolia в других регионах, ближе к конечным пользователям. Возьмем, к примеру, клиента Algolia на восточном побережье США, его кластер находится рядом с Нью-Йорком. Однако не все конечные потребители находятся на восточном побережье: например, значительная часть клиентской базы может быть в Калифорнии. Имея только один кластер на восточном побережье, у калифорнийских пользователей будет более медленная работа поиска. По этой причине размещение сервера DSN на западном побережье может быть хорошей идеей, чтобы приблизить данные к пользователям западного побережья. Добавление серверов DSN в стратегических регионах снижает задержку в сети, повышает производительность и улучшает пользовательский интерфейс. DSN повышает вычислительную мощность Помимо приближения сервера к пользователям, DSN также расширяет вычислительную мощность кластеров. Они могут совместно использовать нагрузку: клиент может выгружать запросы в DSN всякий раз, когда его кластеры достигают пикового использования.

Сервер DSN - это мощная, полностью функционирующая, самодостаточная машина. Это репликация основного кластера. Каждый DSN работает независимо и содержит полные данные и настройки своего основного кластера. DSN получает задание для индексации только после того, как машины в кластере синхронизировались. Таким образом, DSN не сразу синхронизируются со своими кластерами: существует небольшая задержка (между секундами и минутами), зависящая от размера задания индексирования. Чтобы получить оценку этой задержки, необходимо учесть сетевую задержку между кластером и его DSN и добавить время, необходимое DSN для обработки задания индексирования. клиенты API реализуют стратегию повторных попыток, которая использует до четырех различных URL-адресов для каждого поискового запроса: один для DSN и три для кластера. Самый первый запрос всегда идет на ближайший сервер. Если эта первая попытка сработает, поиск будет продолжен. Если это не удается, клиенты активируют свою логику повторных попыток [Источник 6].

MCM

Обычно все данные клиента могут поместиться в один кластер. Однако, когда их становится слишком много, управление несколькими кластерами (англ. Multi-Cluster Management) предлагает способ логически разбить данные так, чтобы: данные охватывали более одного кластера, и Algolia выполняла итоговый запрос только по одному кластеру.

MCM не позволяет выполнять поиск в разных кластерах, а также не объединяет результаты из разных кластеров. Распределение основано на разделении, при котором весь набор данных пользователя может быть помещен в один кластер, так что для выполнения полного поиска фактически требуется только один кластер. Другими словами, MCM не агрегирует результаты из разных кластеров. Это прекрасно работает для системы электронной почты, поскольку пользователи имеют эксклюзивный доступ к своим собственным данным.

Глобальные и частные данные. Управление личными данными осуществляется путем установки параметра UserID на определенный идентификатор пользователя.

Сопоставление пользователей с их кластером. Перед внедрением MCM каждому кластеру Algolia присваивается уникальный идентификатор приложения. Таким образом, если клиенты используют несколько кластеров, то им необходимо отслеживать, какой идентификатор приложения сопоставляется с каким кластером. Кроме того, они должны отслеживать, какой пользователь находится в каком кластере. Поэтому для управления несколькими кластерами они должны хранить таблицу сопоставления из 3 элементов - user, cluster и application id. Каждая операция индексирования и поиска должна проходить через это сопоставление. В случае MCM, кластеры в конфигурации с несколькими кластерами используют один и тот же идентификатор приложения. Клиенту нужно только отправить Algolia идентификатор пользователя, а затем Algolia сделает необходимое перенаправление, чтобы найти правильный кластер.

Перемещение данных и масштабируемость. Перемещение данных из одного кластера в другой требуется для балансировки нагрузки или добавления новых кластеров. MCM легко масштабируется, потому что каждый кластер независим c точки зрения данных: все данные разбиты на столько кластеров, сколько нужно, и каждый поиск выполняется в своем собственном кластере.

MultiClusters API скрывает трудности, связанные с несколькими кластерами, добавляя простой в использовании слой поверх классического API. Чтобы работать с API, нужно убедиться, что каждая запись помечена идентификатором пользователя. Как только эта маркировка завершена, API берет на себя управление сопоставлением пользователя с кластером, перенаправляя каждое обновление и запрос в соответствующий кластер [Источник 7] .

Загрузка большого числа данных

Иногда может понадобиться импортировать огромное количество записей (в десятки или сотни миллионов) в Algolia за короткий период.

  1. Во-первых нужно связаться со специалистом по решениям, чтобы подготовиться к массовым операциям индексирования.
  2. Настроить индексы перед отправкой данных. Параметр searchableAttributes особенно важен, он обеспечит наилучшую производительность индексирования.
  3. Убедиться, что данные помещаются на компьютере. Когда клиент находится на корпоративном плане, серверы поставляются с 128 ГБ оперативной памяти. Для оптимальной производительности рекомендуется держать размер индексов ниже 80% от общего объема выделенной оперативной памяти. Остальные 20% предназначены для других задач, таких как индексация. Когда размер данных превышает объем оперативной памяти, индексы меняются местами между твердотельным накопителем и оперативной памятью по мере выполнения операций, что серьезно снижает производительность. Поскольку Algolia обрабатывает данные, фактический размер индекса часто превышает размер необработанных данных. Точный коэффициент сильно зависит от структуры данных и конфигурации индекса. Обычно он бывает в два-три раза больше.
  4. Algolia настоятельно рекомендует использовать API-клиенты для передачи данных, а не использовать REST API напрямую, пользовательскую оболочку или неофициальный клиент, который не поддерживается внутри компании. API-клиенты имеют метод сохранения объектов, который позволяет передавать записи в пакетах. Отправлять записи по одной не эффективно, потому что он должен следить за ходом выполнения каждого задания.
  5. Рекомендуется отправлять пакеты от 1 до 100 тысяч записей, в зависимости от среднего размера записи. Каждый пакет должен оставаться ниже ~10 МБ данных для оптимальной производительности. API может технически обрабатывать пакеты размером до 1 ГБ.
  6. Также можно передавать данные с нескольких серверов параллельно [Источник 8].

Безопасность

Основа безопасности при использовании Algolia – это API Ключи и правильное распределение их назначений, ACL, двухфакторная аутентификация, использование HTTPS при выполнении операций индексации.

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

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

API Key

API Ключи необходимы для работы с Algolia. Они предоставляют доступ на уровне кода к учетной записи, данным и настройкам индекса. Если вы отправляете или обновляете свои данные, ищете свой индекс или делаете что-либо еще с API Algolia, вам нужно предоставить действительный ключ API.

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

  • Ключ администратора - это самый важный ключ, и он должен оставаться конфиденциальным. Он обеспечивает полный контроль всех индексов и данных. Его нужно использовать только для создания других, более ограниченных ключей для поиска и выполнения операций индексирования.
  • Ключ только для поиска - позволяет немедленно выполнять поиск данных. Он работает на всех индексах вашего приложения и безопасен для использования в вашем производственном интерфейсном коде. Тем не менее, вы можете использовать этот ключ для создания более ограниченных API ключей. Например, можно создать API ключ поиска, который ограничивает доступ только определенному пользователю, определенному индексу или набору индексов.
  • Ключ мониторинга - позволяет получить доступ к Monitoring API, если он входит в тарифный план.
  • Ключ использования - позволяет получить доступ к Usage API, если он входит в тарифный план.
  • Ключ аналитики - позволяет получить доступ к Analytics API, если он входит в тарифный план[Источник 9] .

Использование

Интеграция

Процесс внедрения Algolia можно разбить на три этапа:

  • индексирование данных в Algolia;
  • настройка параметров релевантности и ранжирования;
  • построение пользовательского интерфейса поиска;

Создание пользовательского интерфейса поиска происходит с помощью InstantSearch. Это семейство библиотек UI/UX, которые предлагают полный набор компонентов пользовательского интерфейса, которые можно использовать в любом веб, мобильном или голосовом приложении[Источник 10].

Формат и структура данных

Ключевые Термины

  1. Индекс является источником данных для поиска. Индекс - это набор записей.
  2. Запись представляет отдельные элементы, по которым выполняется поиск. Записи являются аналогом данных для результатов, которые вы видите на экране. В зависимости от варианта использования, запись может быть: продуктом, фильмом, песней, актёром, книгой. Запись состоит из атрибутов.
  3. Атрибуты описывают запись; это пары ключ/значение.

Извлечение данных из источника

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

Преобразование извлеченных данных

Нужно переформатировать данные в совместимый с Algolia формат - записи JSON.

Пример

Запись Algolia состоит из пар ключ:значение. Записи могут содержать любую информацию, которая облегчает поиск. Для работы с Algolia требуется четыре категории атрибутов.

  1. Атрибут для поиска – содержит ключевые слова.
  2. Атрибут для отображения – может содержать ссылку на изображение либо то, что может вернуть Алголия пользователю в качестве результата поиска.
  3. Атрибут для фильтрации – все записи могут быть поделены на категории, по которым будет происходить поиск, например: цвет, бренд, жанр.
  4. Атрибут для настройки рейтинга – такие атрибуты содержат количественные значения, что упрощает сортировку по релевантности.

Например:

[
  {
    "objectID": 42,              // идентификатор записи
    "title": "черничный пирог",  // строковый атрибут           (поиск)
    "photo": "URL of pirog.jpg", // строковый атрибут           (отображение)
    "ingredients": [             // массив строковых атрибутов 	(поиск)
      "мука",
      "черника",
      "молоко",
      "яйца",
      "сахар",
      "дрожжи",
    ],
    "like_count": 978,           // целочисленный атрибут       (рейтинг)
    "baking": true,              // логический атрибут
    "category": "рецепты",       // строковый атрибут           (фильтрация)
  },

]

Перемещение записей в индекс Algolia

Далее нужно поместить свои записи в индекс Algolia, используя один из API клиентов. Можно написать скрипт для отправки данных с помощью API. Скрипт будет работать на компьютере / сервере клиента, а не в Algolia. Скрипт можно написать на любом из 11 языков клиентов API.[Источник 11]

Первые шаги

Установка

Для того, чтобы начать пользоваться Algolia и внедрить поиск в свой проект, нужно установить необходимые пакеты. Например можно установить модуль для python используя pip:

pip install --upgrade 'algoliasearch>=2.0,<3.0'

Инициализация

После установки требуется инициализация клиента, для это понадобится Application ID и API Key (В целях безопасности не рекомендуется использовать Admin API key во front end):

from algoliasearch.search_client import SearchClient
client = SearchClient.create('YourApplicationID', 'YourAdminAPIKey')
index = client.init_index('your_index_name')

Отправка и обновление данных

Algolia позволяет отправлять одну или несколько записей в одном вызове API. Паковать операции индексирования можно с помощью API или панели мониторинга. Для обеспечения оптимальной производительности индексирования настоятельно рекомендуется отправлять записи пакетами, рекомендуемый размер пакета ~10 МБ, который представляет собой от 1000 до 10 000 записей в зависимости от среднего размера записи.

1. Использование одного из API-клиентов Algolia для отправки данных (также известного как индексирование).

Не нужно явно создавать индекс. Если вы попытаетесь добавить объекты в несуществующий индекс, он будет автоматически создан для вас.

Данные из хранилища:

def fetch_data_from_database():
  actors = # Fetch data from your database
  return actors

actors = fetch_data_from_database()

Из файла:

import json

with open('actors.json') as f:
    records = json.load(f)

Из кода:

records = [
    {'name': 'Tom Cruise'},
    {'name': 'Scarlett Johansson'}
]

Отправка данных в Algolia:

index.save_objects(records,  {'autoGenerateObjectIDIfNotExist': True})

2. Использование панели мониторинга Algolia путем отправки файла JSON (Происходит загрузка файлов через сайт).

Управление данными

Перемещение:

client.move_index(
  str indexNameSrc,
  str indexNameDest
)

Копирование:

client.copy_index(str indexNameSrc, str indexNameDest)
client.copy_index(str indexNameSrc, str indexNameDest, {
    'scope' => list
})

# Copy index in between apps
from algoliasearch.account_client import AccountClient

AccountClient.copy_index(
    Index indexSrc,
    Index indexDest
)

Удаление и Очищение:

index.delete()
index.clear_objects()

Экспорт индекса: browse метод, подробно описанный в разделе Browse index, позволяет извлекать результаты, выходящие за пределы 1000 по умолчанию. После получения их, нужно будет сохранить их в файл. Если вы используете JavaScript, вы можете использовать browseAll метод, который будет сканировать весь индекс и выдавать события всякий раз, когда новый кусок записей извлекается.

import json
from algoliasearch.search_client import SearchClient

client = SearchClient.create('YourApplicationID', 'YourAdminAPIKey')
index = client.init_index('your_index_name')

hits = []

for hit in index.browse_objects({'query': ''}):
    hits.append(hit)

with open('your_filename', 'w') as f:
    json.d

Удаление нескольких индексов:

Algolia не предоставляет прямого метода для удаления нескольких индексов, только один за один раз. Тем не менее, вы можете написать свой собственный скрипт использующий API-клиент для циклического перебора и удаления нужных индексов.

Удаление всех индексов

Процесс состоит из четырех этапов:

  1. Перечислите все ваши индексы
  2. Если существуют копии: отделите первичные индексы от копий.
  3. Сначала выполните цикл по первичным индексам и удалите каждый из них.
  4. Если существуют копии: подождите, пока все прикрепленные первичные элементы не будут удалены, чтобы копии больше не прикреплялись, затем выполните цикл через них и удалите каждую копию.
indices = client.list_indices()
ops = []

for index in indices['items']:
    ops.append({
        'indexName': index['name'],
        'action': 'delete',
    })

res = client.multiple_batch(ops)

Удаление подмножества индексов

Удаление некоторых индексов - это то же самое, что и удаление всех, но присутствует шаг фильтрации.

indices = client.list_indices()
ops = []

for index in indices['items']:
    index_name = index['name']
    if '_tmp' in index_name:
        ops.append({
            'indexName': index_name,
            'action': 'delete',
        })

res = client.multiple_batch(ops)

Настройка поиска

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

index.set_settings({"customRanking": ["desc(followers)"]})

Также можно настроить список атрибутов, которые хотелось бы индексировать в порядке важности (сначала самый важный). Algolia предлагает результаты при вводе текста, а это означает, что обычно будет происходить поиск по префиксу. В этом случае порядок атрибутов имеет решающее значение.

index.set_settings({"searchableAttributes": ["lastname", "firstname", "company",
                                         "email", "city", "address"]})

Помимо этого, в документации описаны и другие методы для управления правилами, синонимами, ключами API и многим другим.

Поиск

Algolia позволять искать необходимые данные даже с опечатками:

# Поиск по имени
print(index.search('jimmie'))
# Поиск по имени с опечаткой
print(index.search('jimie'))

Пользовательский интерфейс

InstantSearch.js

Это библиотека с открытым исходным кодом для Vanilla JS, которая позволяет быстро создавать интерфейс поиска в приложении. Она содержит функционал для работы с виджетами. После того как добавлены все нужные виджеты, нужно вызвать метод start. Также можно создавать уникальные пользовательские виджеты, так как каждый виджет представляет собой список классов CSS, которые можно использовать для обновления стиля рендеринга.

Пример

Пример на HTML и JavaScript с использованием InstantSearch.js.

index.html:

<!doctype html>
<head>
  <meta charset="UTF-8">
  <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/instantsearch.css@7.3.1/themes/algolia-min.css" integrity="sha256-HB49n/BZjuqiCtQQf49OdZn63XuKFaxcIHWf0HNKte8=" crossorigin="anonymous">
</head>
<body>
  <header>
    <div id="search-box"></div>
  </header>
  <main>
      <div id="hits"></div>
      <div id="pagination"></div>
  </main>
  <script type="text/html" id="hit-template">
    <div class="hit">
      <p class="hit-name">
        {{#helpers.highlight}}{ "attribute": "firstname" }{{/helpers.highlight}}
        {{#helpers.highlight}}{ "attribute": "lastname" }{{/helpers.highlight}}
      </p>
    </div>
  </script>
  <script src="https://cdn.jsdelivr.net/npm/algoliasearch@4.0.0/dist/algoliasearch-lite.umd.js" integrity="sha256-MfeKq2Aw9VAkaE9Caes2NOxQf6vUa8Av0JqcUXUGkd0=" crossorigin="anonymous"></script>
  <script src="https://cdn.jsdelivr.net/npm/instantsearch.js@4.0.0/dist/instantsearch.production.min.js" integrity="sha256-6S7q0JJs/Kx4kb/fv0oMjS855QTz5Rc2hh9AkIUjUsk=" crossorigin="anonymous"></script>
  <script src="app.js"></script>
</body>

app.js:

// Replace with your own values
const searchClient = algoliasearch(
  'YourApplicationID',
  'YourSearchOnlyAPIKey' // search only API key, not admin API key
);
const search = instantsearch({
  indexName: 'contacts',
  searchClient,
  routing: true,
});
search.addWidgets([
  instantsearch.widgets.configure({
    hitsPerPage: 10,
  })
]);
search.addWidgets([
  instantsearch.widgets.searchBox({
    container: '#search-box',
    placeholder: 'Search for contacts',
  })
]);
search.addWidgets([
  instantsearch.widgets.hits({
    container: '#hits',
    templates: {
      item: document.getElementById('hit-template').innerHTML,
      empty: `We didn't find any results for the search <em>"{{query}}"</em>`,
    },
  })
]);
search.start();

Источники

  1. About Algolia // Algolia. URL: https://www.algolia.com/about/ (дата обращения:06.06.2020)
  2. Infrastructure and distributed hosted search // Algolia. URL: https://www.algolia.com/solutions/infrastructure/ (дата обращения:06.06.2020)
  3. What is Algolia? // Algolia Documentation. URL: https://www.algolia.com/doc/guides/getting-started/what-is-algolia/ (дата обращения:06.06.2020)
  4. How Algolia Reduces Latency For 21B Searches Per Month // Algolia Stories. URL: https://stories.algolia.com/how-algolia-reduces-latency-for-21b-searches-per-month-3959dc926f0#:~:text=Algolia%20runs%20on%20hand-picked,machines%20with%20256GB%20of%20RAM. (дата обращения:07.06.2020)
  5. Servers and Clusters // Algolia Documentation. URL: https://www.algolia.com/doc/guides/scaling/servers-clusters/ (дата обращения:06.06.2020)
  6. Distributed Search Network (DSN) // Algolia Documentation. URL: https://www.algolia.com/doc/guides/scaling/distributed-search-network-dsn/ (дата обращения:06.06.2020)
  7. Multi-Cluster Management (MCM) // Algolia Documentation. URL: https://www.algolia.com/doc/guides/scaling/managing-multiple-clusters-mcm/ (дата обращения:06.06.2020)
  8. Scaling to Larger Datasets // Algolia Documentation. URL: https://www.algolia.com/doc/guides/scaling/scaling-to-larger-datasets/ (дата обращения:06.06.2020)
  9. Security // Algolia Documentation. URL: https://www.algolia.com/doc/guides/security/api-keys/ (дата обращения:06.06.2020)
  10. Quick Start with the Python API Client // Algolia Documentation. URL: https://www.algolia.com/doc/guides/getting-started/quick-start/tutorials/quick-start-with-the-api-client/python/?language=python (дата обращения:06.06.2020)
  11. Format and Structure Your Data // Algolia Documentation. URL: https://www.algolia.com/doc/guides/sending-and-managing-data/prepare-your-data/ (дата обращения:06.06.2020)