Плагин для индексации вашего контента Gatsby в Meilisearch на основе запросов GraphQL.
Чтобы понять Meilisearch и то, как он работает, см. документацию Meilisearch.
Чтобы понять Gatsby и то, как он работает, см. документацию Gatsby.
Попрощайтесь с развертыванием серверов и обновлениями вручную с помощью Meilisearch Cloud. Начните с 14-дневной бесплатной пробной версии! Кредитная карта не требуется.
Внутри вашего приложения Gatsby добавьте пакет:
С npm
:
npm install gatsby-plugin-meilisearch
С yarn
:
yarn add gatsby-plugin-meilisearch
Существует множество простых способов загрузить и запустить экземпляр Meilisearch.
Например, если вы используете Docker:
docker pull getmeili/meilisearch:latest # Fetch the latest version of Meilisearch image from Docker Hub
docker run -it --rm -p 7700:7700 getmeili/meilisearch:latest meilisearch --master-key=masterKey
С помощью этой команды ваш host
экземпляра Meilisearch — http://localhost:7700
, а ваш главный ключ — masterKey
Если у вас нет работающего Gatsby, вы можете либо запустить [игровую площадку, присутствующую в этом проекте) (./playground/README.md), либо создать проект Gatsby.
Запустите приложение, если оно еще не запущено:
gatsby develop
Теперь, когда ваше приложение Gatsby запущено, у вас есть доступ к следующим URL-адресам:
http://localhost:8000/
URL-адрес вашего веб-приложения.http://localhost:8000/___graphql
: URL-адрес инструмента GraphiQL, где вы можете создавать запросы GraphiQL на игровой площадке и запрашивать их. Теперь у вас должно быть работающее приложение Gatsby с установленным gatsby-plugin-meilisearch
и работающий экземпляр Meilisearch.
Давайте настроим наш плагин, чтобы он работал! В этом примере мы получим URL-адрес каждой страницы нашего веб-сайта Gatsby и проиндексируем их в Meilisearch.
Чтобы плагин заработал, откройте файл конфигурации gatsby-config.js
расположенный в корне вашего проекта Gatsby. Вся конфигурация происходит в этом файле.
Сначала вам необходимо добавить свои учетные данные Meilisearch.
Полномочия состоят из:
host
: URL-адрес вашего работающего экземпляра Meilisearch.api_key
: master
ключ или другой key
с разрешением на добавление документов в MeiliSearch. Подробнее о разрешениях и ключах API здесь.search
никогда не должны использоваться в вашем интерфейсе. Для поиска используйте ключ Default Search Key
доступный на маршруте key
, или создайте собственный ключ API только с правами поиска.
Добавьте учетные данные в файл gatsby-config.js
следующим образом:
{
plugins : [
{
resolve : 'gatsby-plugin-meilisearch' ,
options : {
host : 'http://localhost:7700' ,
apiKey : 'masterKey' ,
} ,
} ,
]
}
См. этот раздел, если вы не знаете, какие у вас учетные данные.
Следующий шаг — определить, какие данные мы хотим добавить в Meilisearch и как. Это происходит в поле indexes
.
Поле indexes
представляет собой массив, который может состоять из нескольких индексных объектов. Каждый индексный объект содержит следующую информацию:
indexUid
: имя индекса, в который добавляются данные.
Давайте определим индексный идентификатор pages_url
. При сборке индекс pages_url
создается внутри Meilisearch.
indexUid: ' pages_url '
если pages_url
уже существует, он удаляется и создается заново при сборке
query
: запрос GraphQL, извлекающий данные для добавления в Meilisearch.
Давайте предоставим запрос GraphQL, который получает URL-адреса страниц нашего приложения.
query : `
query MyQuery {
allSitePage {
nodes {
path
}
}
}
` ,
После выполнения этого запроса мы получаем объект data
, содержащий следующее:
{
data : {
allSitePage : {
nodes : [
{
path : '/404/'
} ,
{
path : '/404.html'
} ,
{
path : '/'
}
]
}
}
}
transformer
: преобразует полученные данные в формат, совместимый с Meilisearch.
Теперь, когда мы получили данные с помощью поля query
, они еще не готовы к отправке в Meilisearch.
Используя функцию transformer
, мы можем преобразовать полученные данные в совместимый формат.
Первая проблема с полученными данными заключается в том, что документы, отправляемые в Meilisearch, являются вложенными, хотя они должны находиться в корне массива. Таким образом, содержимое nodes
должно находиться в корне.
{
data : {
allSitePages : {
nodes : [
{
'path' : '/404/'
} ,
]
}
}
}
должно стать:
[
{
'path' : '/404/'
} ,
{
'path' : '/'
} ,
]
Вторая проблема заключается в том, что каждому документу в Meilisearch требуется уникальный идентификатор, называемый первичным ключом.
Таким образом, каждому документу необходимо уникальное поле с именем id
. Например:
{
'id' : 1
'path' : '/404/'
} ,
Для этого нам нужно использовать метод преобразователя для создания окончательного совместимого массива объектов:
{
transformer : data =>
data . allSitePage . nodes . map ( ( node , index ) => ( {
id : index ,
... node ,
} ) ) ,
}
В этой функции мы сопоставляем data.allSitePage.nodes
, чтобы вернуть массив объектов, которые могут быть проиндексированы Meilisearch. Мы добавляем поле id
, так как оно нужно Meilisearch для индексации. Поскольку здесь нет поля, которое можно было бы использовать в качестве id
, мы используем индекс текущего элемента массива.
Если вы хотите узнать больше об этих параметрах ( indexUid
, query
и transformer
), см. параметры индексов.
После заполнения этих полей ваша конфигурация Meilisearch должна выглядеть следующим образом:
plugins: [
{
resolve : 'gatsby-plugin-meilisearch' ,
options : {
host : 'http://localhost:7700' ,
apiKey : 'masterKey' ,
indexes : [
{
indexUid : 'pages_url' ,
transformer : ( data ) =>
data . allSitePage . nodes . map ( ( node , index ) => ( {
id : index ,
... node ,
} ) ) ,
query : `
query MyQuery {
allSitePage {
nodes {
path
}
}
}
` ,
} ,
] ,
} ,
} ,
] ;
gatsby-plugin-meilisearch
извлекает и добавляет ваши данные в Meilisearch в вашей сборке Gatsby.
gatsby build
После сборки сообщение в вашем терминале подтверждает, что ваш контент был успешно проиндексирован:
success gatsby-plugin-meilisearch - x.xxxs - Documents added to Meilisearch
Если вам нужны инструменты для интеграции возможностей поиска в ваше приложение, у нас есть инструменты, которые могут вам помочь:
В файле gatsby-config.js плагин Meilisearch принимает следующие параметры:
host
(обязательно) Поле host
— это адрес, по которому работает ваш экземпляр Meilisearch. gatsby-plugin-meilisearch
нужен для связи с вашим экземпляром Meilisearch и отправки на него ваших данных.
apiKey
(необязательно) Поле apiKey
содержит ключ API, если экземпляр Meilisearch защищен паролем.
skipIndexing
(необязательно)Эта опция позволяет вам создать свой веб-сайт без индексации в Meilisearch. По умолчанию ложь
batchSize
(необязательно)Количество документов, которые должны быть включены в каждый пакет. По умолчанию 1000
settings
(необязательно)Если вы хотите передать настройки вашему экземпляру Meilisearch, вы можете сделать это здесь. Подробнее о настройках Meilisearch
indexes
(обязательно) Поле indexes
представляет собой массив объектов, каждый из которых представляет собой способ добавления данных в определенный индекс.
Вы можете иметь один или несколько index
объектов в indexes
, что может быть полезно, если вы хотите индексировать разное содержимое в разных индексах (или несколько разных данных в одном индексе).
Каждый index
объект должен содержать следующие поля:
indexUid
(обязательно)
Это имя вашего индекса Meilisearch. Это обязательное поле, поскольку сюда добавляются полученные данные внутри Meilisearch. Например, если ваш indexUid
pages_url
, ваш контент будет проиндексирован внутри pages_url
в Meilisearch. Если вы укажете имя индекса, которое уже существует, индекс будет удален и создан заново.
Пример:
indexUid: ' pages_url '
Подробнее об индексах можно узнать в нашей документации.
query
(обязательно)
Это запрос GraphQL, который будет выполнен для получения ваших данных. Ваш запрос может быть очень конкретным в зависимости от используемых вами плагинов. Если вы не уверены в своем запросе, вы можете использовать инструмент GraphiQL (http://localhost:8000/___graphql), предоставляемый Gatsby в режиме разработки, чтобы помочь вам его создать.
Пример:
query: `
query MyQuery {
allSitePage {
nodes {
path
}
}
}
` ,
Вы также можете проверить файл конфигурации нашей игровой площадки, чтобы получить пример запроса GraphQL с использованием плагина gatsby-plugin-mdx
.
transformer
(обязательно)
Это функция, которая преобразует полученные данные перед отправкой их в Meilisearch.
После выполнения запроса GraphQL поступает объект данных со структурой, которая может отличаться от одного проекта к другому, в зависимости от предоставленного вами запроса. Поскольку Meilisearch требует уникальный идентификатор в корне каждого документа и должен избегать вложенных объектов, вам необходимо соответствующим образом преобразовать объект данных. Функция transformer
— подходящее место для этого.
Пример:
transformer : data =>
data . allSitePage . nodes . map ( ( node , index ) => ( {
id : index ,
... node ,
} ) ) ,
Без использования функции transformer
данные будут выглядеть так:
{
data : {
allSitePage : {
nodes : [
{
path : '/404/'
} ,
{
path : '/404.html'
} ,
{
path : '/'
}
]
}
}
}
После использования функции transformer
, как в приведенном выше примере, данные будут выглядеть следующим образом и будут готовы к индексации:
[
{
id : 0 ,
path : '/404/' ,
} ,
{
id : 1 ,
path : '/404.html' ,
} ,
{
id : 2 ,
path : '/' ,
} ,
] ;
Если вы хотите узнать больше о структуре документов Meilisearch, вы можете сделать это в нашей документации.
Полный пример использования:
{
resolve : 'gatsby-plugin-meilisearch' ,
options : {
host : 'http://localhost:7700' ,
apiKey : 'masterKey' ,
skipIndexing : false ,
batchSize : 1000 ,
options : {
settings : {
searchableAttributes : [ "*" ] ,
} ,
} ,
indexes : [
{
indexUid : 'my_index' ,
transformer : ( ) => { } ,
query : ``
} ,
] ,
}
Поддерживаемые версии Гэтсби :
(Этот плагин может работать со старыми версиями Gatsby, но в настоящее время они не тестируются и официально не поддерживаются.)
Поддерживаемые версии Meilisearch :
Этот пакет гарантирует совместимость с версией Meilisearch v1.x, но некоторые функции могут отсутствовать. Пожалуйста, проверьте проблемы для получения дополнительной информации.
Версии узла/NPM :
Мы рекомендуем всегда использовать последнюю версию Gatsby для запуска новых проектов .
Любой новый вклад в этот проект более чем приветствуется!
Если вы хотите узнать больше о рабочем процессе разработки или внести свой вклад, пожалуйста, ознакомьтесь с нашими рекомендациями по участию для получения подробных инструкций!