أنواع الفهارس في Cloud Firestore

الفهارس هي عامل مهم في أداء قاعدة البيانات. يشبه إلى حد كبير فهرس الكتاب الذي يقوم بتعيين الموضوعات في كتاب إلى أرقام الصفحات ، يقوم فهرس قاعدة البيانات بتعيين العناصر الموجودة في قاعدة البيانات إلى مواقعها في قاعدة البيانات. عند إرسال استعلام إلى قاعدة بيانات ، يمكن لقاعدة البيانات استخدام فهرس للبحث بسرعة عن مواقع العناصر التي طلبتها.

تصف هذه الصفحة نوعين من الفهارس التي يستخدمها Cloud Firestore ، فهارس حقل واحد وفهارس مركبة .

فهرس خلف كل استعلام

في حالة عدم وجود فهرس لاستعلام ما ، تقوم معظم قواعد البيانات بالزحف عبر محتوياتها عنصرًا تلو الآخر ، وهي عملية بطيئة تتباطأ أكثر مع نمو قاعدة البيانات. يضمن Cloud Firestore أداءً عاليًا للاستعلام باستخدام الفهارس لجميع الاستعلامات. نتيجة لذلك ، يعتمد أداء الاستعلام على حجم مجموعة النتائج وليس على عدد العناصر في قاعدة البيانات.

إدارة فهرس أقل ، تطوير تطبيقات أكثر

يتضمن Cloud Firestore ميزات تقلل مقدار الوقت الذي تحتاجه لإدارة الفهارس. يتم إنشاء الفهارس المطلوبة لمعظم الاستعلامات الأساسية تلقائيًا بالنيابة عنك. أثناء استخدامك لتطبيقك واختباره ، يساعدك Cloud Firestore في تحديد وإنشاء فهارس إضافية يتطلبها تطبيقك.

أنواع الفهرس

يستخدم Cloud Firestore نوعين من الفهارس: أحادي الحقل ومركب . إلى جانب عدد الحقول المفهرسة ، تختلف الفهارس أحادية الحقل والمركبة في كيفية إدارتك لها.

فهارس ذات مجال واحد

يخزن الفهرس أحادي الحقل مخططًا تم فرزهًا لجميع المستندات في مجموعة تحتوي على حقل معين. يسجل كل إدخال في فهرس أحادي الحقل قيمة المستند لحقل معين وموقع المستند في قاعدة البيانات. يستخدم Cloud Firestore هذه الفهارس لإجراء العديد من الاستعلامات الأساسية. يمكنك إدارة فهارس الحقل الفردي عن طريق تكوين إعدادات الفهرسة التلقائية وإعفاءات الفهرس لقاعدة البيانات الخاصة بك.

فهرسة تلقائية

بشكل افتراضي ، يحتفظ Cloud Firestore تلقائيًا بفهارس الحقل الفردي لكل حقل في المستند وكل حقل فرعي في الخريطة. يستخدم Cloud Firestore الإعدادات الافتراضية التالية لفهارس الحقل الفردي:

  • لكل حقل غير مصفوف وغير خريطة ، تحدد Cloud Firestore فهرسين أحاديي المجال لنطاق المجموعة ، أحدهما في الوضع التصاعدي والآخر في الوضع التنازلي.

  • لكل حقل خريطة ، يُنشئ Cloud Firestore فهرسًا تصاعديًا واحدًا لنطاق المجموعة وفهرسًا تنازليًا لكل حقل فرعي غير مصفوف وغير خريطة في الخريطة.

  • لكل حقل مصفوفة في مستند ، ينشئ Cloud Firestore فهرسًا يحتوي على مصفوفة نطاق المجموعة ويحافظ عليه.

  • لا يتم الاحتفاظ بالفهارس ذات المجال الفردي بنطاق مجموعة المجموعة افتراضيًا.

إعفاءات مؤشر الحقل الواحد

يمكنك استثناء حقل من إعدادات الفهرسة التلقائية الخاصة بك عن طريق إنشاء استثناء فهرس ذو حقل واحد. يتجاوز استثناء الفهرسة إعدادات الفهرس التلقائي لقاعدة البيانات. يمكن للإعفاء أن يمكّن فهرسًا أحادي الحقل يمكن أن تقوم إعدادات الفهرسة التلقائية الخاصة بك بتعطيله أو تعطيله ، بطريقة أخرى ، فهرس أحادي الحقل يمكن أن تقوم الفهرسة التلقائية بتمكينه. للحالات التي يمكن أن تكون فيها الاستثناءات مفيدة ، راجع أفضل ممارسات الفهرسة .

إذا قمت بإنشاء استثناء فهرس ذو حقل واحد لحقل خريطة ، فإن الحقول الفرعية للخريطة ترث تلك الإعدادات. ومع ذلك ، يمكنك تحديد استثناءات فهرس الحقل الفردي لحقول فرعية محددة. إذا قمت بحذف استثناء لحقل فرعي ، فسيرث الحقل الفرعي إعدادات الإعفاء الخاصة به ، إذا كانت موجودة ، أو الإعدادات على مستوى قاعدة البيانات في حالة عدم وجود استثناءات أصل.

لإنشاء استثناءات الفهرس أحادي الحقل وإدارتها ، راجع إدارة الفهارس في Cloud Firestore .

فهارس مركبة

يخزن الفهرس المركب مخططًا تم فرزهًا لجميع المستندات في المجموعة ، بناءً على قائمة مرتبة من الحقول للفهرسة.

يستخدم Cloud Firestore فهارس مركبة لدعم الاستعلامات التي لا تدعمها بالفعل فهارس الحقل الفردي.

لا يُنشئ Cloud Firestore تلقائيًا فهارس مركبة كما يفعل لفهارس الحقل الفردي بسبب العدد الكبير من مجموعات الحقول الممكنة. بدلاً من ذلك ، يساعدك Cloud Firestore في تحديد وإنشاء الفهارس المركبة المطلوبة أثناء إنشاء تطبيقك.

إذا حاولت إجراء الاستعلام أعلاه دون إنشاء الفهرس المطلوب أولاً ، فسيعرض Cloud Firestore رسالة خطأ تحتوي على رابط يمكنك اتباعه لإنشاء الفهرس المفقود. يحدث هذا في أي وقت تحاول فيه استعلامًا لا يدعمه فهرس. يمكنك أيضًا تحديد الفهارس المركبة وإدارتها يدويًا باستخدام وحدة التحكم أو باستخدام Firebase CLI . لمعرفة المزيد حول إنشاء الفهارس المركبة وإدارتها ، راجع إدارة الفهارس .

أوضاع الفهرس ونطاقات الاستعلام

يمكنك تكوين الفهارس ذات الحقل الواحد والفهارس المركبة بشكل مختلف ، لكن كلاهما يتطلب تكوين أوضاع الفهرس ونطاقات الاستعلام لفهارسك.

أوضاع الفهرس

عندما تحدد فهرسًا ، فإنك تحدد وضع الفهرس لكل حقل مفهرس. يدعم وضع فهرس كل حقل عبارات استعلام محددة في هذا الحقل. يمكنك الاختيار من بين أوضاع الفهرس التالية:

وضع الفهرس وصف
تصاعدي == < != <= >= > in not-in
تنازلي not-in in == < != <= >= >
المصفوفة ‑ تحتوي على يدعم array-contains و array-contains-any عبارات استعلام في الحقل.

نطاقات الاستعلام

يتم تحديد نطاق كل فهرس إلى مجموعة أو مجموعة مجموعة. يُعرف هذا باسم نطاق استعلام الفهرس:

نطاق المجموعة
ينشئ Cloud Firestore فهارس بنطاق تجميع افتراضيًا. تدعم هذه الفهارس الاستعلامات التي ترجع نتائج من مجموعة واحدة.

نطاق مجموعة المجموعة
تتضمن مجموعة المجموعات جميع المجموعات التي لها نفس معرف المجموعة. لتشغيل استعلام مجموعة المجموعة الذي يقوم بإرجاع نتائج مُصفاة أو مرتبة من مجموعة مجموعة ، يجب عليك إنشاء فهرس مناظر بنطاق مجموعة المجموعة.

مثال على الفهرسة

من خلال إنشاء فهارس ذات حقل واحد تلقائيًا ، يتيح Cloud Firestore لتطبيقك دعم استعلامات قاعدة البيانات الأساسية بسرعة. تسمح لك الفهارس أحادية الحقل بإجراء استعلامات بسيطة بناءً على قيم الحقول والمقارنات < ، <= ، == ، >= ، > ، in . بالنسبة لحقول المصفوفة ، تسمح لك بتنفيذ استعلامات array-contains array-contains-any استعلام.

للتوضيح ، افحص الأمثلة التالية من وجهة نظر إنشاء الفهرس. يُنشئ المقتطف التالي بعض مستندات city في مجموعة cities country حقول name state capital population tags لكل مستند:

الويب
var citiesRef = db.collection("cities");

citiesRef.doc("SF").set({
    name: "San Francisco", state: "CA", country: "USA",
    capital: false, population: 860000,
    regions: ["west_coast", "norcal"] });
citiesRef.doc("LA").set({
    name: "Los Angeles", state: "CA", country: "USA",
    capital: false, population: 3900000,
    regions: ["west_coast", "socal"] });
citiesRef.doc("DC").set({
    name: "Washington, D.C.", state: null, country: "USA",
    capital: true, population: 680000,
    regions: ["east_coast"] });
citiesRef.doc("TOK").set({
    name: "Tokyo", state: null, country: "Japan",
    capital: true, population: 9000000,
    regions: ["kanto", "honshu"] });
citiesRef.doc("BJ").set({
    name: "Beijing", state: null, country: "China",
    capital: true, population: 21500000,
    regions: ["jingjinji", "hebei"] });

بافتراض إعدادات الفهرسة التلقائية الافتراضية ، يقوم Cloud Firestore بتحديث فهرس واحد تصاعدي أحادي الحقل لكل حقل غير مصفوفة ، وفهرس واحد تنازلي أحادي الحقل لكل حقل غير مصفوفة ، ويحتوي صفيف واحد على فهرس حقل واحد لحقل المصفوفة. يمثل كل صف في الجدول التالي مدخلاً في فهرس حقل واحد:

مجموعة حقل مفهرس نطاق الاستعلام
مدن اسم مجموعة
مدن دولة مجموعة
مدن دولة مجموعة
مدن رأس المال مجموعة
مدن السكان مجموعة
مدن اسم مجموعة
مدن دولة مجموعة
مدن دولة مجموعة
مدن رأس المال مجموعة
مدن مجموعة
مدن array-contains مناطق مجموعة

الاستعلامات التي تدعمها فهارس ذات حقل واحد

باستخدام هذه الفهارس أحادية الحقل التي تم إنشاؤها تلقائيًا ، يمكنك تشغيل استعلامات بسيطة مثل ما يلي:

الويب
const stateQuery = citiesRef.where("state", "==", "CA");
const populationQuery = citiesRef.where("population", "<", 100000);
const nameQuery = citiesRef.where("name", ">=", "San Francisco");

يمكنك in إنشاء ومركبة استعلامات المساواة ( == ):

الويب
citiesRef.where('country', 'in', ["USA", "Japan", "China"])

// Compound equality queries
citiesRef.where("state", "==", "CO").where("name", "==", "Denver")
citiesRef.where("country", "==", "USA")
         .where("capital", "==", false)
         .where("state", "==", "CA")
         .where("population", "==", 860000)

إذا كنت بحاجة إلى تشغيل استعلام مركب يستخدم مقارنة نطاق ( < أو <= أو > أو >= ) أو إذا كنت بحاجة إلى الفرز حسب حقل مختلف ، فيجب عليك إنشاء فهرس مركب لهذا الاستعلام.

يسمح لك فهرس array-contains بالاستعلام عن حقل مصفوفة regions :

الويب
citiesRef.where("regions", "array-contains", "west_coast")
// array-contains-any and array-contains use the same indexes
citiesRef.where("regions", "array-contains-any", ["west_coast", "east_coast"])

الاستعلامات التي تدعمها الفهارس المركبة

يستخدم Cloud Firestore فهارس مركبة لدعم الاستعلامات المركبة غير المدعومة بالفعل بواسطة فهارس الحقل الفردي. على سبيل المثال ، قد تحتاج إلى فهرس مركب لطلبات البحث التالية:

الويب
citiesRef.where("country", "==", "USA").orderBy("population", "asc")
citiesRef.where("country", "==", "USA").where("population", "<", 3800000)
citiesRef.where("country", "==", "USA").where("population", ">", 690000)
// in and == clauses use the same index
citiesRef.where("country", "in", ["USA", "Japan", "China"])
         .where("population", ">", 690000)

تتطلب هذه الاستعلامات الفهرس المركب أدناه. نظرًا لأن الاستعلام يستخدم المساواة ( == أو in ) لحقل country ، يمكنك استخدام وضع الفهرس التصاعدي أو التنازلي لهذا الحقل. بشكل افتراضي ، تطبق عبارات عدم المساواة ترتيب فرز تصاعديًا استنادًا إلى الحقل في عبارة عدم المساواة.

مجموعة الحقول المفهرسة نطاق الاستعلام
مدن (أو ) البلد ، السكان مجموعة

لتشغيل نفس الاستعلامات ولكن بترتيب فرز تنازلي ، تحتاج إلى فهرس مركب إضافي في الاتجاه التنازلي population :

الويب
citiesRef.where("country", "==", "USA").orderBy("population", "desc")

citiesRef.where("country", "==", "USA")
         .where("population", "<", 3800000)
         .orderBy("population", "desc")

citiesRef.where("country", "==", "USA")
         .where("population", ">", 690000)
         .orderBy("population", "desc")

citiesRef.where("country", "in", ["USA", "Japan", "China"])
         .where("population", ">", 690000)
         .orderBy("population", "desc")
مجموعة الحقول المفهرسة نطاق الاستعلام
مدن country، تعداد السكان مجموعة
مدن country ، السكان مجموعة

تحتاج أيضًا إلى إنشاء فهرس مركب لدمج array-contains-any array-contains إضافية.

الويب
citiesRef.where("regions", "array-contains", "east_coast")
         .where("capital", "==", true)

// array-contains-any and array-contains use the same index
citiesRef.where("regions", "array-contains-any", ["west_coast", "east_coast"])
         .where("capital", "==", true)
مجموعة الحقول المفهرسة نطاق الاستعلام
مدن مجموعة تحتوي على علامات ، (أو ) رأس مال مجموعة

الاستعلامات التي تدعمها فهارس مجموعة المجموعة

لتوضيح فهرس بنطاق مجموعة المجموعة ، تخيل أنك تضيف مجموعة فرعية landmarks إلى بعض مستندات city :

الويب
var citiesRef = db.collection("cities");

citiesRef.doc("SF").collection("landmarks").doc().set({
    name: "Golden Gate Bridge",
    category : "bridge" });
citiesRef.doc("SF").collection("landmarks").doc().set({
    name: "Golden Gate Park",
    category : "park" });

citiesRef.doc("DC").collection("landmarks").doc().set({
    name: "National Gallery of Art",
    category : "museum" });
citiesRef.doc("DC").collection("landmarks").doc().set({
    name: "National Mall",
    category : "park" });

باستخدام فهرس الحقل الفردي التالي مع نطاق المجموعة ، يمكنك الاستعلام عن مجموعة landmarks مدينة واحدة بناءً على حقل category :

مجموعة الحقول المفهرسة نطاق الاستعلام
معالم (أو ) مجموعة
الويب
citiesRef.doc("SF").collection("landmarks").where("category", "==", "park")
citiesRef.doc("SF").collection("landmarks").where("category", "in", ["park", "museum"])

الآن ، تخيل أنك مهتم بالاستعلام عن المعالم في جميع المدن. لتشغيل هذا الاستعلام في مجموعة المجموعة التي تتكون من جميع مجموعات landmarks ، يجب تمكين فهرس حقل واحد landmarks مع نطاق مجموعة المجموعة:

مجموعة الحقول المفهرسة نطاق الاستعلام
معالم (أو ) مجموعة التحصيل

مع تمكين هذا الفهرس ، يمكنك الاستعلام عن مجموعة مجموعة landmarks :

الويب
var landmarksGroupRef = db.collectionGroup("landmarks");

landmarksGroupRef.where("category", "==", "park")
landmarksGroupRef.where("category", "in", ["park", "museum"])

لتشغيل استعلام مجموعة المجموعة الذي يقوم بإرجاع نتائج مُصفاة أو مرتبة ، يجب أن تقوم بتمكين حقل واحد أو فهرس مركب مطابق مع نطاق مجموعة المجموعة. ومع ذلك ، لا تتطلب استعلامات مجموعة المجموعات التي لا تقوم بتصفية النتائج أو ترتيبها أي تعريفات فهرسة إضافية.

على سبيل المثال ، يمكنك تشغيل استعلام مجموعة المجموعات التالي دون تمكين فهرس إضافي:

الويب
db.collectionGroup("landmarks").get()

إدخالات الفهرس

تؤثر الفهارس التي تم تكوينها لمشروعك ، بالإضافة إلى بنية المستند ، على إدخالات الفهرس الخاصة بالمستند ، والتي يتم احتسابها في النهاية ضمن حد عدد مدخلات الفهرس.

هنا مثال للتوضيح.

وثيقة

name : "San Francisco"
temperatures : {summer: 67, winter: 55}
neighborhoods : ["Mission", "Downtown", "Marina"]

فهارس أحادية المجال

  • (تلقائي) اسم ASC & DESC
  • (تلقائي) درجات حرارة ASC و DESC
  • (اوتوماتيك) صفيف الاحياء يحتوي

فهارس مركبة

  • اسم ASC والأحياء ASC
  • اسم DESC والأحياء ASC

إدخالات الفهرس الناتجة

ينتج عن تكوين الفهرسة هذا إدخالات الفهرس الـ 12 التالية للمستند:

فهرس دخول
اسم ASC & DESC الاسم: "سان فرانسيسكو"
درجات حرارة ASC و DESC درجات الحرارة في الصيف: 67
درجات حرارة ASC و DESC درجات الحرارة في الشتاء: 55
تحتوي مجموعة الأحياء الأحياء: "المهمة"
تحتوي مجموعة الأحياء الأحياء: "وسط المدينة"
تحتوي مجموعة الأحياء الأحياء: "مارينا"
اسم ASC والأحياء ASC الاسم: "سان فرانسيسكو" ، الأحياء: "المهمة"
اسم ASC والأحياء ASC الاسم: "سان فرانسيسكو" ، الأحياء: "وسط المدينة"
اسم ASC والأحياء ASC الاسم: "سان فرانسيسكو" ، الأحياء: "مارينا"
اسم DESC والأحياء ASC الاسم: "سان فرانسيسكو" ، الأحياء: "المهمة"
اسم DESC والأحياء ASC الاسم: "سان فرانسيسكو" ، الأحياء: "وسط المدينة"
اسم DESC والأحياء ASC الاسم: "سان فرانسيسكو" ، الأحياء: "مارينا"

الفهارس والتسعير

تساهم الفهارس في تكاليف تخزين تطبيقك. لمزيد من المعلومات حول كيفية حساب حجم تخزين الفهارس ، راجع حجم إدخال الفهرس .

الاستفادة من دمج الفهرس

على الرغم من أن Cloud Firestore يستخدم فهرسًا لكل استعلام ، فإنه لا يتطلب بالضرورة فهرسًا واحدًا لكل استعلام. بالنسبة إلى الاستعلامات ذات العبارات المتعددة المتساوية ( == ) ، وبشكل اختياري ، بند orderBy ، يمكن لـ Cloud Firestore إعادة استخدام الفهارس الحالية. يمكن لـ Cloud Firestore دمج الفهارس لمرشحات المساواة البسيطة لإنشاء الفهارس المركبة اللازمة لاستعلامات المساواة الأكبر.

يمكنك تقليل تكاليف الفهرسة عن طريق تحديد المواقف التي يمكنك فيها الاستفادة من دمج الفهرس. على سبيل المثال ، تخيل مجموعة restaurants لتطبيق تقييم مطعم:

  • المطاعم

    • برجرثيم

      name : "Burger Thyme"
      category : "burgers"
      city : "San Francisco"
      editors_pick : true
      star_rating : 4

الآن ، تخيل أن هذا التطبيق يستخدم استعلامات مثل تلك الواردة أدناه. لاحظ أن التطبيق يستخدم مجموعات من عبارات المساواة category city و editors_pick أثناء الفرز دائمًا عن طريق تصنيف star_rating التصاعدي:

الويب
db.collection("restaurants").where("category", "==", "burgers")
                            .orderBy("star_rating")

db.collection("restaurants").where("city", "==", "San Francisco")
                            .orderBy("star_rating")

db.collection("restaurants").where("category", "==", "burgers")
                            .where("city", "==", "San Francisco")
                            .orderBy("star_rating")

db.collection("restaurants").where("category", "==", "burgers")
                            .where("city", "==" "San Francisco")
                            .where("editors_pick", "==", true )
                            .orderBy("star_rating")

يمكنك إنشاء فهرس لكل استعلام:

مجموعة الحقول المفهرسة نطاق الاستعلام
مطاعم فئة ، arrow_upward مجموعة
مطاعم مدينة ، arrow_upward مجموعة
مطاعم فئة ، مدينة ، arrow_upward مجموعة
مطاعم فئة ، مدينة ، مجموعة

كحل أفضل ، يمكنك تقليل عدد الفهارس من خلال الاستفادة من قدرة Cloud Firestore على دمج الفهارس لشروط المساواة:

مجموعة الحقول المفهرسة نطاق الاستعلام
مطاعم فئة ، arrow_upward مجموعة
مطاعم مدينة ، arrow_upward مجموعة
مطاعم editors_pick ، arrow_upward مجموعة

هذه المجموعة من الفهارس ليست أصغر حجمًا فحسب ، بل إنها تدعم أيضًا استعلامًا إضافيًا:

الويب
db.collection("restaurants").where("editors_pick", "==", true)
                            .orderBy("star_rating")

حدود الفهرسة

تنطبق الحدود التالية على الفهارس. لجميع الحصص والحدود ، انظر الحصص والحدود .

حد تفاصيل
الحد الأقصى لعدد الفهارس المركبة لقاعدة بيانات 200
الحد الأقصى لعدد إعفاءات الفهرس أحادي الحقل لقاعدة بيانات 200

الحد الأقصى لعدد مدخلات الفهرس لكل مستند

40000

عدد إدخالات الفهرس هو مجموع ما يلي للمستند:

  • عدد إدخالات الفهرس أحادي الحقل
  • عدد إدخالات الفهرس المركب

لمعرفة كيفية تحويل Cloud Firestore مستندًا ومجموعة من الفهارس إلى مدخلات فهرس ، راجع مثال عدد مدخلات الفهرس هذا .

الحجم الأقصى لمدخل الفهرس

7.5 كيلوبايت

لمعرفة كيفية حساب Cloud Firestore لحجم إدخال الفهرس ، راجع حجم إدخال الفهرس .

الحد الأقصى لمجموع أحجام مدخلات فهرس المستند

8 ميغا بايت

الحجم الإجمالي هو مجموع ما يلي للمستند:

  • مجموع حجم مدخلات فهرس الحقل الفردي للمستند
  • مجموع حجم مدخلات الفهرس المركب للمستند
  • الحجم الأقصى لقيمة حقل مفهرس

    1500 بايت

    يتم قطع قيم الحقول التي تزيد عن 1500 بايت. قد تُرجع الاستعلامات التي تتضمن قيم حقول مبتورة نتائج غير متناسقة.

    أفضل ممارسات الفهرسة

    بالنسبة لمعظم التطبيقات ، يمكنك الاعتماد على الفهرسة التلقائية وروابط رسائل الخطأ لإدارة الفهارس الخاصة بك. ومع ذلك ، قد ترغب في إضافة استثناءات ذات حقل واحد في الحالات التالية:

    قضية وصف
    حقول سلسلة كبيرة

    إذا كان لديك حقل سلسلة يحتوي غالبًا على قيم سلسلة طويلة لا تستخدمها للاستعلام ، فيمكنك خفض تكاليف التخزين عن طريق إعفاء الحقل من الفهرسة.

    معدلات كتابة عالية لمجموعة تحتوي على مستندات ذات قيم متسلسلة

    إذا قمت بفهرسة حقل يزيد أو ينقص بالتتابع بين المستندات في مجموعة ، مثل الطابع الزمني ، فإن الحد الأقصى لمعدل الكتابة للمجموعة هو 500 كتابة في الثانية. إذا لم تقم بالاستعلام بناءً على الحقل ذي القيم المتسلسلة ، يمكنك استثناء الحقل من الفهرسة لتجاوز هذا الحد.

    في حالة استخدام إنترنت الأشياء بمعدل كتابة مرتفع ، على سبيل المثال ، قد تقترب المجموعة التي تحتوي على مستندات ذات حقل طابع زمني من الحد الأقصى البالغ 500 عملية كتابة في الثانية.

    مجموعة كبيرة أو حقول خريطة

    يمكن أن تقترب حقول المصفوفة أو الخريطة الكبيرة من الحد الأقصى البالغ 40000 مدخل فهرس لكل مستند. إذا كنت لا تقوم بالاستعلام استنادًا إلى مصفوفة كبيرة أو حقل خريطة ، فيجب إعفاؤه من الفهرسة.