Plugin ini masih dalam versi beta dan belum didukung secara resmi
Jangan ragu untuk membuka terbitan untuk pertanyaan atau ide apa pun
Anda dapat menentukan daftar kueri yang akan dijalankan dan cara mengubahnya menjadi array objek yang akan diindeks. Saat Anda menjalankan gatsby build
, itu akan mempublikasikannya ke Algolia.
grafik LR
A[Sumber 1] --> |kueri| Gatsby
B[Sumber 2] --> |kueri| Gatsby
C[Sumber 3] --> |kueri| Gatsby
Gatsby --> |pembuatan gatsby| Algolia
Di sini kami memiliki contoh dengan beberapa data yang mungkin tidak terlalu relevan, tetapi akan berfungsi dengan konfigurasi default gatsby new
yarn add gatsby-plugin-algolia
Pertama, tambahkan kredensial ke file .env, yang tidak akan Anda komit. Jika Anda melacak ini di file Anda, dan terutama jika situs tersebut open source, Anda akan membocorkan kunci API admin Anda. Ini berarti siapa pun dapat mengubah apa pun di indeks Algolia Anda.
// .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
} ,
} ,
] ,
} ;
Indeks akan disinkronkan dengan nama indeks yang diberikan di Algolia pada langkah build
di Gatsby. Hal ini tidak dilakukan lebih awal untuk mencegah Anda melebihi kuota saat mengembangkan.
Plugin ini hanya akan memperbarui node yang diubah atau dihapus di situs Gatsby Anda.
Kami mengandalkan kolom contentDigest
default Gatsby, jadi pastikan kolom tersebut ditanyakan.
Anda dapat mengatur pengaturan untuk setiap indeks satu per satu (per kueri), atau jika tidak, pengaturan yang ada akan tetap dipertahankan.
mergeSettings
memungkinkan Anda menyimpan perubahan pengaturan yang dibuat di situs web Algolia. Perilaku default ( mergeSettings: false
) akan menghapus pengaturan indeks Anda dan menggantinya dengan pengaturan dari konfigurasi pada setiap build.
Jika disetel ke true, pengaturan indeks konfigurasi akan digabungkan dengan pengaturan indeks yang ada di Algolia (dengan pengaturan indeks konfigurasi diutamakan).
CATATAN: Saat menggunakan mergeSettings
, pengaturan apa pun yang dihapus dari pengaturan konfigurasi akan terus dipertahankan karena masih ada di Algolia. Jika Anda ingin menghapus suatu pengaturan, pastikan untuk menghapusnya dari konfigurasi dan di situs web Algolia.
Terkadang, pada platform terbatas seperti Netlify, kueri bersamaan ke indeks yang sama dapat menyebabkan hasil yang tidak diharapkan atau build yang terhenti. Menyetel concurrentQueries
ke false
akan membuat kueri dijalankan secara berurutan, bukan secara bersamaan, sehingga dapat menyelesaikan beberapa masalah akses bersamaan. Ketahuilah bahwa opsi ini mungkin membuat pengindeksan memakan waktu lebih lama dibandingkan sebaliknya.
Bidang transformer
menerima suatu fungsi dan secara opsional Anda dapat menyediakan fungsi async
.
Menambahkan parameter transformator dapat berguna jika internal.contentDigest
lebih stabil dibandingkan objek Anda. Misalnya, Anda dapat mengganti internal.contentDigest
yang disediakan Gatsby dengan hash objek.
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 ,
} ,
} ;
} ) ;
}
Ini adalah versi pertama plugin kami dan belum didukung secara resmi. Silakan tinggalkan semua masukan Anda dalam masalah GitHub?
Hal ini dapat terjadi karena beberapa alasan:
Anda menggunakan plugin gatsby-plugin-algolia
dalam mode pengembangan. Plugin hanya akan dikirim ke Algolia saat Anda menjalankan gatsby build
. Hal ini untuk mencegah Anda melebihi kuota saat mengembangkan.
internal.contentDigest
Beberapa plugin Gatsby tidak membuat internal.contentDigest
baru, meskipun kontennya telah berubah. Untuk memperbaikinya, gunakan transformer
untuk membuat internal.contentDigest
baru berdasarkan konten node.