ปลั๊กอินนี้อยู่ใน รุ่นเบต้า และยังไม่ได้รับการสนับสนุนอย่างเป็นทางการ
อย่าลังเลที่จะเปิดประเด็นสำหรับคำถามหรือแนวคิดใดๆ
คุณสามารถระบุรายการแบบสอบถามที่จะรันและวิธีแปลงเป็นอาร์เรย์ของออบเจ็กต์เพื่อทำดัชนีได้ เมื่อคุณรัน gatsby build
มันจะเผยแพร่สิ่งเหล่านั้นไปยัง Algolia
กราฟ LR
A[แหล่งที่มา 1] --> |แบบสอบถาม| แกสบี้
B[แหล่งที่มา 2] --> |แบบสอบถาม| แกสบี้
C[แหล่งที่มา 3] --> |แบบสอบถาม| แกสบี้
Gatsby --> |gatsby build| อัลโกเลีย
เรามีตัวอย่างพร้อมข้อมูลบางอย่างที่อาจไม่เกี่ยวข้องมากนัก แต่จะใช้ได้กับการกำหนดค่าเริ่มต้นของ 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
} ,
} ,
] ,
} ;
ดัชนีจะซิงโครไนซ์กับชื่อดัชนีที่ให้ไว้ใน Algolia ในขั้นตอน build
ใน Gatsby ไม่ได้ทำก่อนหน้านี้เพื่อป้องกันไม่ให้คุณใช้โควต้าเกินในขณะที่กำลังพัฒนา
ปลั๊กอินนี้จะอัปเดตเฉพาะโหนดที่เปลี่ยนแปลงหรือถูกลบบนไซต์ Gatsby ของคุณ
เราใช้ช่อง contentDigest
เริ่มต้นของ Gatsby ดังนั้นโปรดตรวจสอบให้แน่ใจว่ามีการสอบถามแล้ว
คุณสามารถตั้งค่าสำหรับแต่ละดัชนีแยกกัน (ต่อการสืบค้น) ไม่เช่นนั้นดัชนีจะคงการตั้งค่าที่มีอยู่ไว้
mergeSettings
ช่วยให้คุณสามารถรักษาการเปลี่ยนแปลงการตั้งค่าที่ทำบนเว็บไซต์ Algolia พฤติกรรมเริ่มต้น ( mergeSettings: false
) จะล้างการตั้งค่าดัชนีของคุณและแทนที่ด้วยการตั้งค่าจากการกำหนดค่าในแต่ละบิลด์
เมื่อตั้งค่าเป็นจริง การตั้งค่าดัชนีการกำหนดค่าจะรวมกับการตั้งค่าดัชนีที่มีอยู่ใน Algolia (โดยการตั้งค่าดัชนีการกำหนดค่าจะมีความสำคัญกว่า)
หมายเหตุ: เมื่อใช้ mergeSettings
การตั้งค่า ที่ถูกลบออก จากการตั้งค่า config จะยังคงมีอยู่ต่อไปเนื่องจากจะยังคงอยู่ใน Algolia หากคุณต้องการลบการตั้งค่า อย่าลืมลบออกจากทั้งการกำหนดค่าและบนเว็บไซต์ของ Algolia
บางครั้ง บนแพลตฟอร์มที่จำกัด เช่น Netlify การสืบค้นดัชนีเดียวกันพร้อมกันอาจทำให้เกิดผลลัพธ์ที่ไม่คาดคิดหรือบิลด์ที่ค้าง การตั้งค่า concurrentQueries
เป็น false
จะทำให้การสืบค้นทำงานตามลำดับแทนที่จะดำเนินการพร้อมกัน ซึ่งอาจแก้ไขปัญหาการเข้าถึงพร้อมกันบางอย่างได้ โปรดทราบว่าตัวเลือกนี้อาจทำให้การจัดทำดัชนีใช้เวลานานกว่าปกติ
ฟิลด์ transformer
ยอมรับฟังก์ชันและคุณอาจจัดให้มีฟังก์ชัน async
ก็ได้
การเพิ่มพารามิเตอร์ Transformer จะมีประโยชน์หาก internal.contentDigest
มีเสถียรภาพมากกว่าอ็อบเจ็กต์ของคุณ ตัวอย่างเช่น คุณสามารถแทนที่ internal.contentDigest
ที่ให้โดย Gatsby ด้วยแฮชของอ็อบเจ็กต์
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
ในโหมดการพัฒนา ปลั๊กอินจะพุชไปที่ Algolia เมื่อคุณรัน gatsby build
เท่านั้น นี่เป็นการป้องกันไม่ให้คุณใช้โควต้าเกินในขณะที่กำลังพัฒนา
internal.contentDigest
แบบคงที่ ปลั๊กอิน Gatsby บางตัวไม่สร้าง internal.contentDigest
ใหม่ แม้ว่าเนื้อหาจะมีการเปลี่ยนแปลงก็ตาม ในการแก้ไขปัญหานี้ ให้ใช้ transformer
เพื่อสร้าง internal.contentDigest
ใหม่โดยอิงตามเนื้อหาของโหนด