هذا البرنامج المساعد في مرحلة تجريبية ولم يتم دعمه رسميًا بعد
لا تتردد في فتح القضايا لأية أسئلة أو أفكار
يمكنك تحديد قائمة الاستعلامات المطلوب تشغيلها وكيفية تحويلها إلى مصفوفة من الكائنات لفهرستها. عند تشغيل gatsby build
، سيتم نشرها على Algolia.
الرسم البياني LR
أ[المصدر 1] --> |استعلام| غاتسبي
ب[المصدر 2] --> |استعلام| غاتسبي
C[المصدر 3] --> |استعلام| غاتسبي
غاتسبي --> |بناء غاتسبي| ألغوليا
لدينا هنا مثال يحتوي على بعض البيانات التي قد لا تكون ذات صلة بالموضوع، ولكنها ستعمل مع التكوين الافتراضي لـ gatsby new
yarn add gatsby-plugin-algolia
قم أولاً بإضافة بيانات الاعتماد إلى ملف .env، والذي لن تلتزم به. إذا قمت بتتبع ذلك في ملفك، وخاصة إذا كان الموقع مفتوح المصدر، فسوف تقوم بتسريب مفتاح واجهة برمجة تطبيقات المشرف الخاص بك. وهذا يعني أن أي شخص قادر على تغيير أي شيء في فهرس 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
، ستستمر أي إعدادات محذوفة من إعدادات التكوين في الاستمرار لأنها ستظل موجودة في Algolia. إذا كنت تريد إزالة أحد الإعدادات، فتأكد من إزالته من كل من التكوين ومن موقع Algolia الإلكتروني.
في بعض الأحيان، على منصات محدودة مثل Netlify، يمكن أن تؤدي الاستعلامات المتزامنة لنفس الفهرس إلى نتائج غير متوقعة أو إصدارات معلقة. يؤدي تعيين concurrentQueries
إلى false
إلى تشغيل الاستعلامات بشكل تسلسلي وليس بشكل متزامن، مما قد يحل بعض مشكلات الوصول المتزامن. انتبه إلى أن هذا الخيار قد يجعل الفهرسة تستغرق وقتًا أطول مما قد تستغرقه بخلاف ذلك.
يقبل حقل transformer
وظيفة ويمكنك توفير وظيفة async
بشكل اختياري.
يمكن أن تكون إضافة معلمة محول مفيدة إذا كان 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
جديد استنادًا إلى محتوى العقدة.