Algolia Instant Search позволяет создавать интуитивно понятный и быстрый поиск для вашего веб-сайта. Используя интеграцию с Algolia, вы можете начать работу с Algolia за считанные минуты. В этом руководстве мы интегрируем серверную часть GraphQL с Algolia, чтобы автоматически синхронизировать изменения ваших данных с поисковыми индексами Algolia.

Мы увидим, как создавать поисковые индексы Algolia и поддерживать их синхронизацию при изменении базовых данных. Посмотрите живую демонстрацию или полный код на GitHub.

Вступление

Представьте, что у нас есть онлайн-каталог интернет-магазина разливного пива и пивоварен-производителей.

Для каждого пива мы сохраняем name, style и ibu (значение горечи) и abv (алкоголь по объему), а также информацию о продаваемой пивоварне. У пивоварни есть name и city.

Примечание. В этом руководстве мы будем использовать данные из Craft Cans, как описано здесь.

Давайте посмотрим, какое пиво доступно на нашей первой пивоварне:

query {
  allBreweries(first: 1) {
    name
    city
    beers {
      name
      style
      abv
      ibu
    }
  }
}

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

Создание поисковых индексов Algolia

Давайте посмотрим, как создать новый поисковый индекс Algolia. На странице интеграции вам сначала нужно ввести свои учетные данные Algolia.

Создайте новый ключ с ограниченным доступом Algolia

Ключ требует ACL Добавить записи и Удалить записи, как показано на этом снимке экрана:

Введите учетные данные

Введите учетные данные:

  • Идентификатор приложения: вы можете скопировать идентификатор приложения из своей учетной записи Algolia.
  • Ключ API: скопируйте ограниченный ключ, который мы создали выше.

Затем вы можете создать новый индекс для типа Beer. Назовите индекс Beers и введите этот запрос:

{
  node {
    name
    style
    abv
    ibu
    brewery {
      name
    }
  }
}

Этот запрос GraphQL определяет структуру поискового индекса Algolia, который мы назвали Beers. Создание индекса поиска приводит к однократной синхронизации всех Beer узлов с выбранными полями. Кроме того, каждый созданный или обновленный узел также автоматически синхронизируется!

Используя поисковые индексы Algolia, у нас есть разные типы атрибутов:

  • доступные для поиска атрибуты, которые используются для определения результатов, которые следует отображать.
  • presentational attributes, которые необходимы только для отображения результата, но пользователи не могут выполнять поиск по этим атрибутам для отображения определенного результата.

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

Точный контроль синхронизируемых записей

При определении индекса вы можете использовать фильтры в запросе индекса, чтобы получить точный контроль над тем, какие записи будут синхронизироваться. В этом примере мы создаем индекс для определенного магазина. Создайте новый индекс с именем ChampionBrewery для типа Beer и введите этот запрос:

{
  node(filter: {
    brewery: {
      name: "Champion Brewing Company"
    }
  }) {
    name
    style
    brewery {
      name
      city
    }
  }
}

Теперь только узлы, доступные в Champion Brewing Company, синхронизируются с недавно созданным индексом Algolia ChampionBrewery.

Геопоиск Алголии

Мы также можем использовать Algolia Geosearch с этой настройкой. Чтобы это работало, вам потребуется специальная настройка на основе API Algolia:

  • значения местоположения должны быть сохранены в типе местоположения с полями lng и lat типа float
  • при определении индекса поиска необходимо использовать псевдоним _geoloc для вложенного типа местоположения

Например, если мы хотим выполнить поиск магазинов по местоположению, мы могли бы определить этот запрос индекса Algolia по типу Shop:

{
  node {
    name
    _geoloc: location {
      lat
      lng
    }
  }
}

См. Здесь для получения дополнительной информации об Algolia Geosearch.

Заключение

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

Если вы хотите начать работу с Algolia, вы можете проверить живую демонстрацию или полный код на GitHub.