Dieses Plugin befindet sich in der Betaphase und wird noch nicht offiziell unterstützt
Wenn Sie Fragen oder Ideen haben, können Sie gerne Probleme eröffnen
Sie können eine Liste der auszuführenden Abfragen angeben und angeben, wie diese in ein Array von zu indizierenden Objekten umgewandelt werden. Wenn Sie gatsby build
ausführen, werden diese in Algolia veröffentlicht.
Grafik LR
A[Quelle 1] -> |query| Gatsby
B[Quelle 2] -> |query| Gatsby
C[Quelle 3] -> |query| Gatsby
Gatsby --> |gatsby build| Algolia
Hier haben wir ein Beispiel mit einigen Daten, die möglicherweise nicht sehr relevant sind, aber mit der Standardkonfiguration von gatsby new
funktionieren
yarn add gatsby-plugin-algolia
Fügen Sie zunächst Anmeldeinformationen zu einer .env-Datei hinzu, die Sie nicht festschreiben. Wenn Sie dies in Ihrer Datei nachverfolgen, insbesondere wenn die Website Open Source ist, verlieren Sie Ihren Admin-API-Schlüssel. Das würde bedeuten, dass jeder alles an Ihrem Algolia-Index ändern kann.
// .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
} ,
} ,
] ,
} ;
Der Index wird im build
-Schritt in Gatsby mit dem bereitgestellten Indexnamen auf Algolia synchronisiert. Dies geschieht nicht früher, um zu verhindern, dass Sie während der Entwicklung das Kontingent überschreiten.
Dieses Plugin aktualisiert nur die geänderten oder gelöschten Knoten auf Ihrer Gatsby-Site.
Wir verlassen uns auf das Standardfeld contentDigest
von Gatsby. Stellen Sie daher sicher, dass es abgefragt wird.
Sie können Einstellungen für jeden Index einzeln (pro Abfrage) festlegen, andernfalls bleiben Ihre vorhandenen Einstellungen erhalten.
mergeSettings
ermöglicht es Ihnen, auf der Algolia-Website vorgenommene Einstellungsänderungen beizubehalten. Das Standardverhalten ( mergeSettings: false
) löscht Ihre Indexeinstellungen und ersetzt sie bei jedem Build durch Einstellungen aus der Konfiguration.
Wenn es auf „true“ gesetzt ist, werden die Konfigurationsindexeinstellungen mit den vorhandenen Indexeinstellungen in Algolia zusammengeführt (wobei die Konfigurationsindexeinstellungen Vorrang haben).
HINWEIS: Bei Verwendung von mergeSettings
bleiben alle gelöschten Einstellungen aus den Konfigurationseinstellungen weiterhin erhalten, da sie weiterhin in Algolia vorhanden sind. Wenn Sie eine Einstellung entfernen möchten, müssen Sie diese sowohl aus der Konfiguration als auch auf der Website von Algolia entfernen.
Auf eingeschränkten Plattformen wie Netlify können gleichzeitige Abfragen desselben Index manchmal zu unerwarteten Ergebnissen oder hängenden Builds führen. Wenn Sie concurrentQueries
auf false
setzen, werden Abfragen nacheinander und nicht gleichzeitig ausgeführt, wodurch möglicherweise einige Probleme beim gleichzeitigen Zugriff gelöst werden. Beachten Sie, dass diese Option dazu führen kann, dass die Indizierung länger dauert, als dies sonst der Fall wäre.
Das transformer
akzeptiert eine Funktion und optional können Sie eine async
Funktion bereitstellen.
Das Hinzufügen eines Transformatorparameters kann nützlich sein, wenn der internal.contentDigest
stabiler ist als Ihr Objekt. Sie können beispielsweise den von Gatsby bereitgestellten internal.contentDigest
durch einen Hash des Objekts ersetzen.
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 ,
} ,
} ;
} ) ;
}
Dies ist die allererste Version unseres Plugins und wird noch nicht offiziell unterstützt. Bitte hinterlassen Sie Ihr gesamtes Feedback zu GitHub-Problemen.
Dies kann aus mehreren Gründen geschehen:
Sie verwenden das Plugin gatsby-plugin-algolia
im Entwicklungsmodus. Das Plugin wird nur dann an Algolia gepusht, wenn Sie gatsby build
ausführen. Dies soll verhindern, dass Sie während der Entwicklung Ihr Kontingent überschreiten.
internal.contentDigest
Einige Gatsby-Plugins erstellen kein neues internal.contentDigest
, selbst wenn sich der Inhalt geändert hat. Um dies zu beheben, verwenden Sie einen transformer
, um einen neuen internal.contentDigest
basierend auf dem Inhalt des Knotens zu erstellen.