Unlimited Plugins, WordPress themes, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. Laravel 5
Code

Как настроить полнотекстовый поиск с помощью Laravel Scout

by
Difficulty:IntermediateLength:MediumLanguages:

Russian (Pусский) translation by Ilya Nikov (you can also view the original English article)

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

Что такое Laravel Scout? Официальная документация описывает его следующим образом:

Laravel Scout предоставляет простое, основанное на драйверах решение для добавления полнотекстового поиска в ваши модели Eloquent. Используя наблюдателей модели, Scout автоматически синхронизирует поисковые индексы в с вашими записями Eloquent.

В основном, Laravel Scout - это библиотека, которая управляет манипулированием индексом всякий раз, когда происходит изменение данных модели. Место, где будут индексироваться данные, зависит от драйвера, который вы настроили с помощью библиотеки Scout.

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

Мы начнем с установки серверных библиотек Scout и Algolia, и по мере продвижения мы рассмотрим пример реального приложения, чтобы продемонстрировать, как вы можете индексировать и искать ваши данные.

Конфигурации сервера

В этом разделе мы собираемся установить зависимости, необходимые для того, чтобы библиотека Scout работала в Laravel. После установки нам нужно будет немного ее настроить, чтобы Laravel мог обнаружить библиотеку Scout.

Давайте продолжим и установим библиотеку Scout с помощью Composer.

В значительной степени это касается установки библиотеки Scout. Теперь, когда мы установили библиотеку Scout, нужно удостовериться, что Laravel знает о ней.

Работая с Laravel, вы, вероятно, знаете концепцию поставщика услуг, которая позволяет вам настраивать службы в вашем приложении. Таким образом, всякий раз, когда вы хотите включить новую службу в своем приложении Laravel, вам просто нужно добавить соответствующую запись поставщика услуг в config/app.php.

Если вы еще не знакомы с поставщиками услуг Laravel, я настоятельно рекомендую вам ознакомиться с этой вводной статьей, в которой объясняются основы поставщиков услуг в Laravel.

В нашем случае нам просто нужно добавить поставщика ScoutServiceProvider в список поставщиков услуг в config/app.php, как показано в следующем фрагменте.

Теперь, Laravel знает о поставщике услуг ScoutServiceProvider. Библиотека Scout поставляется с файлом конфигурации, который позволяет нам настраивать учетные данные API.

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

Как вы можете видеть, она скопировала файл vendor/laravel/scout/config/scout.php в config/scout.php.

Затем создайте учетную запись с Algolia, так как нам понадобятся учетные данные их API. После того, как у вас будет информация API, давайте продолжим и настроим необходимые параметры в файле config/scout.php, как показано в следующем фрагменте.

Обратите внимание, что мы установили значение SCOUT_DRIVER для драйвера algolia. Таким образом, вам необходимо настроить необходимые параметры для драйвера Algolia в конце файла. В принципе, вам просто нужно установить id и secret, которые вы получили из учетной записи Algolia.

Как вы можете видеть, мы извлекаем значения из переменных среды. Поэтому давайте проверим, правильно ли заданы следующие переменные в файле .env.

Наконец, нам нужно установить SDK Algolia PHP, который будет использоваться для взаимодействия с API-интерфейсами Algolia. Давайте установим его с помощью Composer, как показано в следующем фрагменте.

И при этом мы установили все зависимости, необходимые для публикации и индексации данных в службу Algolia.

Делаем модели индексируемыми и доступными для поиска

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

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

Первое, что нам нужно сделать, это добавить трейт Laravel\Scout\Searchable к модели Post. Это делает модель Post доступной для поиска; Laravel синхронизирует записи с индексом Algolia каждый раз, когда Post-запись добавляется, обновляется или удаляется.

При этом модель Post удобна для поиска!

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

Вы можете добавить toSearchableArray в класс модели для настройки полей, которые будут проиндексированы.

Теперь мы готовы импортировать и индексировать существующие записи Post в Algolia. Фактически, библиотека Scout облегчает это, предоставляя следующую команду artisan.

Это должно импортировать все записи модели Post за один раз! Они индексируются, как только они импортируются, поэтому мы уже готовы запросить записи. Двигаемся дальше и исследуем дашборд Algolia, чтобы увидеть импортированные записи и другие утилиты.

Как это работает

В этом разделе мы создадим пример, демонстрирующий, как выполнять операции поиска и CRUD, которые синхронизируются в реальном времени с индексом Algolia.

Идем дальше и создаем файл app/Http/Controllers/SearchController.php со следующим содержимым.

Конечно, нам нужно также добавить соответствующие маршруты.

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

Напомним, что мы сделали модель Post доступной для поиска, добавив трейт Searchable. Таким образом, модель Post может использовать метод search для извлечения записей из индекса Algolia. В приведенном выше примере мы пытаемся получить записи, соответствующие ключевому слову title.

Затем есть метод add, который имитирует рабочий процесс добавления новой записи записи.

В приведенном выше коде нет ничего необычного; он просто создает новую запись после использования модели Post. Но модель Post реализует трейт Searchable, поэтому Laravel делает некоторую дополнительную работу на этот раз, индексируя вновь созданную запись в Algolia. Итак, как вы можете видеть, индексирование выполняется в режиме реального времени.

Наконец, существует метод delete. Давайте также рассмотрим и его.

Как и следовало ожидать, запись удаляется сразу же из индекса Algolia, как только она удаляется из базы данных.

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

На этом мы заканчиваем нашу статью!

Заключение

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

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

Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.