Этот плагин находится в стадии бета-тестирования и еще официально не поддерживается.
Не стесняйтесь открывать вопросы по любым вопросам или идеям.
Вы можете указать список запросов для запуска и способ их преобразования в массив объектов для индексации. Когда вы запустите gatsby build
, он опубликует их в Algolia.
график LR
A[Источник 1] --> |запрос| Гэтсби
B[Источник 2] --> |запрос| Гэтсби
C[Источник 3] --> |запрос| Гэтсби
Гэтсби --> |Гэтсби билд| Алголия
Здесь у нас есть пример с некоторыми данными, которые могут быть не очень актуальными, но будут работать с конфигурацией gatsby new
по умолчанию.
yarn add gatsby-plugin-algolia
Сначала добавьте учетные данные в файл .env, который вы не будете фиксировать. Если вы отследите это в своем файле, особенно если сайт с открытым исходным кодом, вы потеряете свой ключ API администратора. Это будет означать, что любой может изменить что-либо в вашем индексе Algolia.
// .env.production
ALGOLIA_APP_ID=XXX
ALGOLIA_API_KEY=XXX
ALGOLIA_INDEX_NAME=XXX
require ( 'dotenv' ) . config ( {
path : `.env. ${ process . env . NODE_ENV } ` ,
} ) ;
// gatsby-config.js
const myQuery = `
query {
pages: allSitePage {
nodes {
# querying id is required
id
component
path
componentChunkName
jsonName
internal {
# querying internal.contentDigest is required
contentDigest
type
owner
}
}
}
}
` ;
const queries = [
{
query : myQuery ,
queryVariables : { } , // optional. Allows you to use graphql query variables in the query
transformer : ( { data } ) => data . pages . nodes , // optional
indexName : 'index name to target' , // overrides main index name, optional
settings : {
// optional, any index settings
// Note: by supplying settings, you will overwrite all existing settings on the index
} ,
mergeSettings : false , // optional, defaults to false. See notes on mergeSettings below
} ,
] ;
module . exports = {
plugins : [
{
// This plugin must be placed last in your list of plugins to ensure that it can query all the GraphQL data
resolve : `gatsby-plugin-algolia` ,
options : {
appId : process . env . ALGOLIA_APP_ID ,
// Use Admin API key without GATSBY_ prefix, so that the key isn't exposed in the application
// Tip: use Search API key with GATSBY_ prefix to access the service from within components
apiKey : process . env . ALGOLIA_API_KEY ,
indexName : process . env . ALGOLIA_INDEX_NAME , // for all queries
queries ,
chunkSize : 10000 , // default: 1000
settings : {
// optional, any index settings
// Note: by supplying settings, you will overwrite all existing settings on the index
} ,
mergeSettings : false , // optional, defaults to false. See notes on mergeSettings below
concurrentQueries : false , // default: true
dryRun : false , // default: false, only calculate which objects would be indexed, but do not push to Algolia
continueOnFailure : false , // default: false, don't fail the build if Algolia indexing fails
algoliasearchOptions : undefined , // default: { timeouts: { connect: 1, read: 30, write: 30 } }, pass any different options to the algoliasearch constructor
} ,
} ,
] ,
} ;
Индекс будет синхронизирован с предоставленным именем индекса в Algolia на этапе build
в Gatsby. Это не делается раньше, чтобы предотвратить превышение квоты во время разработки.
Этот плагин обновит только измененные или удаленные узлы на вашем сайте Gatsby.
Мы полагаемся на поле contentDigest
Gatsby по умолчанию, поэтому убедитесь, что оно запрашивается.
Вы можете установить настройки для каждого индекса индивидуально (для каждого запроса), или в противном случае будут сохранены существующие настройки.
mergeSettings
позволяет сохранять изменения настроек, сделанные на веб-сайте Algolia. Поведение по умолчанию ( mergeSettings: false
) уничтожит ваши настройки индекса и заменит их настройками из конфигурации в каждой сборке.
Если установлено значение true, настройки индекса конфигурации будут объединены с существующими настройками индекса в Algolia (при этом настройки индекса конфигурации будут иметь приоритет).
ПРИМЕЧАНИЕ. При использовании mergeSettings
любые удаленные настройки из настроек конфигурации будут сохраняться, поскольку они все еще будут существовать в Algolia. Если вы хотите удалить настройку, обязательно удалите ее как из конфигурации, так и с веб-сайта Algolia.
Иногда на ограниченных платформах, таких как Netlify, одновременные запросы к одному и тому же индексу могут привести к неожиданным результатам или зависанию сборок. Если для concurrentQueries
установлено значение false
, запросы выполняются последовательно, а не одновременно, что может решить некоторые проблемы одновременного доступа. Имейте в виду, что этот параметр может привести к тому, что индексирование займет больше времени, чем в противном случае.
Поле transformer
принимает функцию, и при желании вы можете предоставить async
функцию.
Добавление параметра преобразователя может быть полезно, если internal.contentDigest
более стабилен, чем ваш объект. Например, вы можете заменить предоставленный Gatsby internal.contentDigest
хешем объекта.
const crypto = require ( 'crypto' ) ;
function transformer ( data ) {
return data . map ( item => {
const hash = crypto
. createHash ( 'md5' )
. update ( JSON . stringify ( item ) )
. digest ( 'hex' ) ;
return {
... item ,
internal : {
... item . internal ,
contentDigest : hash ,
} ,
} ;
} ) ;
}
Это самая первая версия нашего плагина, и она еще официально не поддерживается. Пожалуйста, оставляйте все свои отзывы в вопросах GitHub?
Это может происходить по нескольким причинам:
Вы используете плагин gatsby-plugin-algolia
в режиме разработки. Плагин будет отправлять данные в Algolia только при запуске gatsby build
. Это сделано для того, чтобы вы не превысили квоту во время разработки.
internal.contentDigest
Некоторые плагины Gatsby не создают новый internal.contentDigest
, даже если содержимое изменилось. Чтобы это исправить, используйте transformer
для создания нового internal.contentDigest
на основе содержимого узла.