このプラグインはベータ版であり、まだ正式にはサポートされていません
質問やアイデアがあれば、お気軽に問題を開いてください
実行するクエリのリストと、それらをインデックスを付けるオブジェクトの配列に変換する方法を指定できます。 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
} ,
} ,
] ,
} ;
インデックスは、Gatsby のbuild
ステップで、Algolia で指定されたインデックス名と同期されます。これは、開発中にクォータを超えないようにするために、以前は行われていませんでした。
このプラグインは、Gatsby サイト上の変更または削除されたノードのみを更新します。
Gatsby のデフォルトのcontentDigest
フィールドに依存しているため、それがクエリされていることを確認してください。
各インデックスの設定を個別に (クエリごとに) 設定することができます。それ以外の場合は、既存の設定が維持されます。
mergeSettings
使用すると、Algolia Web サイトで行われた設定の変更を保存できます。デフォルトの動作 ( mergeSettings: false
) では、インデックス設定が消去され、各ビルドの構成の設定に置き換えられます。
true に設定すると、構成インデックス設定が Algolia の既存のインデックス設定とマージされます (構成インデックス設定が優先されます)。
注: mergeSettings
を使用する場合、構成設定から削除された設定は Algolia にまだ存在するため、引き続き保持されます。設定を削除したい場合は、構成と Algolia の Web サイトの両方から必ず削除してください。
Netlify のような限定されたプラットフォームでは、同じインデックスに対する同時クエリによって予期しない結果が発生したり、ビルドがハングしたりすることがあります。 concurrentQueries
をfalse
に設定すると、クエリが同時にではなく順番に実行されるようになり、同時アクセスの問題が解決される可能性があります。このオプションを使用すると、インデックス作成に他のオプションよりも時間がかかる場合があることに注意してください。
transformer
フィールドは関数を受け入れ、オプションでasync
関数を提供できます。
internal.contentDigest
がオブジェクトよりも安定している場合は、transformer パラメータを追加すると便利です。たとえば、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
プラグインを開発モードで使用しています。プラグインは、 gatsby build
実行するときにのみ Algolia にプッシュされます。これは、開発中にクォータを超えないようにするためです。
internal.contentDigest
一部の Gatsby プラグインは、コンテンツが変更された場合でも、新しいinternal.contentDigest
を作成しません。これを修正するには、 transformer
使用して、ノードのコンテンツに基づいて新しいinternal.contentDigest
を作成します。