該插件處於測試階段,尚未正式支援
如有任何問題或想法,請隨時提出問題
您可以指定要執行的查詢清單以及如何將它們轉換為要索引的物件陣列。當您執行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 網站上所做的設定變更。預設行為( mergeSettings: false
)將清除您的索引設置,並將其替換為每個建置上的配置中的設定。
當設定為 true 時,配置索引設定將與 Algolia 中的現有索引設定合併(配置索引設定優先)。
注意:使用mergeSettings
時,從配置設定中刪除的任何設定都會繼續保留,因為它們仍然存在於 Algolia 中。如果您想刪除某個設置,請務必從配置和 Algolia 網站上刪除。
有時,在 Netlify 等有限平台上,對相同索引的並發查詢可能會導致意外結果或掛起建置。將concurrentQueries
設為false
會使查詢按順序運行而不是並發運行,這可能會解決一些並發存取問題。請注意,此選項可能會使索引花費的時間比其他選項更長。
transformer
欄位接受一個函數,並且您可以選擇提供一個async
函數。
如果internal.contentDigest
比您的物件更穩定,則新增轉換器參數可能會很有用。例如,您可以將 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 issues 中留下您的所有回饋?
發生這種情況可能有以下幾個原因:
您正在開發模式下使用gatsby-plugin-algolia
插件。當您執行gatsby build
時,該插件只會推送到 Algolia。這是為了防止您在開發時超出配額。
internal.contentDigest
某些 Gatsby 外掛程式不會建立新的internal.contentDigest
,即使內容已變更。若要解決此問題,請使用transformer
根據節點的內容建立新的internal.contentDigest
。