该插件处于测试阶段,尚未正式支持
如有任何问题或想法,请随时提出问题
您可以指定要运行的查询列表以及如何将它们转换为要索引的对象数组。当您运行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
。