Ce plugin est en version bêta et n'est pas encore officiellement pris en charge
N'hésitez pas à ouvrir des problèmes pour toute question ou idée
Vous pouvez spécifier une liste de requêtes à exécuter et comment les transformer en un tableau d'objets à indexer. Lorsque vous exécutez gatsby build
, il les publiera sur Algolia.
graphique LR
A[Source 1] --> |requête| Gatsby
B[Source 2] --> |requête| Gatsby
C[Source 3] --> |requête| Gatsby
Gatsby --> |gatsby build| Algolie
Nous avons ici un exemple avec des données qui pourraient ne pas être très pertinentes, mais qui fonctionneront avec la configuration par défaut de gatsby new
yarn add gatsby-plugin-algolia
Ajoutez d’abord les informations d’identification à un fichier .env, que vous ne validerez pas. Si vous suivez cela dans votre fichier, et surtout si le site est open source, vous perdrez votre clé API d'administration. Cela signifierait que n'importe qui peut changer n'importe quoi sur votre index 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
} ,
} ,
] ,
} ;
L'index sera synchronisé avec le nom d'index fourni sur Algolia lors de l'étape build
dans Gatsby. Cela n'est pas fait plus tôt pour vous éviter de dépasser votre quota lors du développement.
Ce plugin mettra à jour uniquement les nœuds modifiés ou supprimés sur votre site Gatsby.
Nous nous appuyons sur le champ contentDigest
par défaut de Gatsby, alors assurez-vous qu'il est interrogé.
Vous pouvez définir les paramètres pour chaque index individuellement (par requête), sinon il conservera vos paramètres existants.
mergeSettings
vous permet de conserver les modifications de paramètres effectuées sur le site Web d'Algolia. Le comportement par défaut ( mergeSettings: false
) effacera vos paramètres d'index et les remplacera par les paramètres de la configuration sur chaque build.
Lorsqu'ils sont définis sur true, les paramètres d'index de configuration seront fusionnés avec les paramètres d'index existants dans Algolia (les paramètres d'index de configuration ayant priorité).
REMARQUE : lors de l'utilisation mergeSettings
, tous les paramètres supprimés des paramètres de configuration continueront d'être conservés car ils existeront toujours dans Algolia. Si vous souhaitez supprimer un paramètre, assurez-vous de le supprimer à la fois de la configuration et du site Web d'Algolia.
Parfois, sur des plates-formes limitées comme Netlify, des requêtes simultanées sur le même index peuvent conduire à des résultats inattendus ou à des builds suspendus. En définissant concurrentQueries
sur false
les requêtes sont exécutées de manière séquentielle plutôt que simultanée, ce qui peut résoudre certains problèmes d'accès simultané. Sachez que cette option peut rendre l’indexation plus longue qu’elle ne le ferait autrement.
Le champ transformer
accepte une fonction et vous pouvez éventuellement fournir une fonction async
.
L'ajout d'un paramètre de transformateur peut être utile si internal.contentDigest
est plus stable que votre objet. Vous pouvez par exemple remplacer le internal.contentDigest
fourni par Gatsby par un hachage de l'objet.
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 ,
} ,
} ;
} ) ;
}
Il s'agit de la toute première version de notre plugin et n'est pas encore officiellement supportée. Veuillez laisser tous vos commentaires dans les problèmes GitHub ?
Cela peut se produire pour plusieurs raisons :
Vous utilisez le plugin gatsby-plugin-algolia
en mode développement. Le plugin ne sera envoyé à Algolia que lorsque vous exécuterez gatsby build
. Ceci afin de vous éviter de dépasser votre quota lors du développement.
internal.contentDigest
Certains plugins Gatsby ne créent pas de nouveau internal.contentDigest
, même si le contenu a changé. Pour résoudre ce problème, utilisez un transformer
pour créer un nouveau internal.contentDigest
basé sur le contenu du nœud.