Este plugin está em beta e ainda não tem suporte oficial
Sinta-se à vontade para abrir questões para qualquer dúvida ou ideia
Você pode especificar uma lista de consultas a serem executadas e como transformá-las em uma matriz de objetos a serem indexados. Quando você executa gatsby build
, ele os publicará no Algolia.
gráfico LR
A[Fonte 1] --> |consulta| Gatsby
B[Fonte 2] --> |consulta| Gatsby
C[Fonte 3] --> |consulta| Gatsby
Gatsby --> |construção de gatsby| Algolia
Aqui temos um exemplo com alguns dados que podem não ser muito relevantes, mas funcionarão com a configuração padrão do gatsby new
yarn add gatsby-plugin-algolia
Primeiro adicione credenciais a um arquivo .env, que você não irá confirmar. Se você rastrear isso em seu arquivo, e especialmente se o site for de código aberto, você vazará sua chave de API de administrador. Isso significaria que qualquer pessoa pode alterar qualquer coisa no seu índice 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
} ,
} ,
] ,
} ;
O índice será sincronizado com o nome do índice fornecido no Algolia na etapa build
em Gatsby. Isso não é feito antes para evitar que você ultrapasse a cota durante o desenvolvimento.
Este plugin atualizará apenas os nós alterados ou excluídos do seu site Gatsby.
Contamos com o campo contentDigest
padrão de Gatsby, portanto, certifique-se de que ele seja consultado.
Você pode definir configurações para cada índice individualmente (por consulta) ou, caso contrário, as configurações existentes serão mantidas.
mergeSettings
permite preservar as alterações de configurações feitas no site da Algolia. O comportamento padrão ( mergeSettings: false
) eliminará suas configurações de índice e as substituirá pelas configurações da configuração em cada compilação.
Quando definido como verdadeiro, as configurações do índice de configuração serão mescladas com as configurações de índice existentes no Algolia (com as configurações do índice de configuração tendo precedência).
NOTA: Ao usar mergeSettings
, quaisquer configurações excluídas das configurações continuarão a ser persistidas, pois ainda existirão no Algolia. Se você deseja remover uma configuração, certifique-se de removê-la tanto da configuração quanto do site da Algolia.
Às vezes, em plataformas limitadas como Netlify, consultas simultâneas ao mesmo índice podem levar a resultados inesperados ou construções suspensas. Definir concurrentQueries
como false
faz com que as consultas sejam executadas sequencialmente em vez de simultaneamente, o que pode resolver alguns problemas de acesso simultâneo. Esteja ciente de que esta opção pode fazer com que a indexação demore mais do que seria de outra forma.
O campo transformer
aceita uma função e, opcionalmente, você pode fornecer uma função async
.
Adicionar um parâmetro transformador pode ser útil se internal.contentDigest
for mais estável que seu objeto. Você pode, por exemplo, substituir o internal.contentDigest
fornecido por Gatsby por um hash do objeto.
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 ,
} ,
} ;
} ) ;
}
Esta é a primeira versão do nosso plugin e ainda não é oficialmente suportada. Por favor, deixe todos os seus comentários nas questões do GitHub?
Isso pode estar acontecendo por alguns motivos:
Você está usando o plugin gatsby-plugin-algolia
no modo de desenvolvimento. O plugin só será enviado para Algolia quando você executar gatsby build
. Isso evita que você ultrapasse sua cota durante o desenvolvimento.
internal.contentDigest
estático.contentDigest Alguns plugins Gatsby não criam um novo internal.contentDigest
, mesmo que o conteúdo tenha mudado. Para corrigir isso, use um transformer
para criar um novo internal.contentDigest
baseado no conteúdo do nó.