إشعار
يتطلب الوصول إلى هذه الصفحة تخويلاً. يمكنك محاولة تسجيل الدخول أو تغيير الدلائل.
يتطلب الوصول إلى هذه الصفحة تخويلاً. يمكنك محاولة تغيير الدلائل.
الفهارس هي هياكل تحسن سرعة استرجاع البيانات من خلال توفير وصول سريع إلى الحقول في المجموعة. تعمل هذه الأنظمة عن طريق إنشاء مجموعة مرتبة من المؤشرات للبيانات، غالبا بناء على الحقول الرئيسية. يستخدم Azure DocumentDB الفهارس في سياقات متعددة، بما في ذلك دفع الاستعلام، والقيود الفريدة، والتقسيم الجزئي.
Important
حقل "_id" هو الحقل الوحيد المفهرس افتراضيا ويمكن أن يكون 2 KBالحد الأقصى لحجم الحقل هو . يوصى بإضافة فهارس إضافية تعتمد على مرشحات ومحسومات الاستعلام لتحسين الأداء.
أنواع الفهارس
للتبسيط، دعونا نأخذ مثالا على تطبيق مدونة مع الإعداد التالي:
-
اسم قاعدة البيانات:
cosmicworks -
اسم المجموعة:
products
هذا التطبيق النموذجي يخزن المقالات كوثائق بالبنية التالية. كل الأمثلة المقتبسة تستخدم هيكل هذه المجموعة بشكل أكبر.
{
"_id": ObjectId("617a34e7a867530bff1b2346"),
"title": "Azure DocumentDB - A Game Changer",
"content": "Azure DocumentDB is a globally distributed, multi-model database service.",
"author": {lastName: "Doe", firstName: "John"},
"category": "Technology",
"launchDate": ISODate("2024-06-24T10:08:20.000Z"),
"published": true
}
مؤشرات الحقل الواحد
تخزن فهارس الحقل الواحد معلومات من حقل واحد في مجموعة. لا يهم ترتيب الفرز لفهرس الحقل الفردي.
_id الحقل يبقى مفهرسا بشكل افتراضي.
يدعم Azure DocumentDB إنشاء الفهرس في التالي
- حقول المستندات على المستوى الأعلى.
- مستند مدمج.
- الحقول داخل المستند المدمج.
ينشئ الأمر التالي فهرس حقل واحد على الحقل author ، ويقوم الأمر التالي بإنشائه على حقل firstNameمدمج .
use cosmicworks
db.products.createIndex({"author": 1})
// indexing embedded property
db.products.createIndex({"author.firstName": -1})
يمكن لاستعلام واحد استخدام عدة فهارس لحقل واحد حيثما توفرت الفرصة.
إشعار
يتيح Azure DocumentDB إنشاء حد أقصى 64 فهرسة على المجموعة. اعتمادا على المستوى، يمكننا التخطيط لتمديد حتى 300 فهرس عند الطلب.
الفهارس المركبة
تحسن الفهارس المركبة أداء قواعد البيانات من خلال السماح بالاستعلام والفرز الفعال بناء على عدة حقول داخل المستندات. يقلل هذا التحسين من الحاجة إلى مسح المجموعات بأكملها، مما يسرع من استرجاع البيانات وتنظيمها.
ينشئ الأمر التالي فهرسا مركبا على الحقول author وبترتيب launchDate ترتيب معاكس.
use cosmicworks
db.products.createIndex({"author":1, "launchDate":-1})
Order الحقول تؤثر على الانتقائية أو استخدام المؤشر.
find الاستفسار لن يستخدم الفهرس الذي تم إنشاؤه.
use cosmicworks
db.products.find({"launchDate": {$gt: ISODate("2024-06-01T00:00:00.000Z")}})
القيود
- الحد الأقصى 32 حقلا/مسارا ضمن مؤشر مركب.
فهارس جزئية
الفهارس التي تحتوي على فلتر استعلام مرتبط يصف متى تولد مصطلح في الفهرس.
use cosmicworks
db.products.createIndex (
{ "author": 1, "launchDate": 1 },
{ partialFilterExpression: { "launchDate": { $gt: ISODate("2024-06-24T10:08:20.000Z") } } }
)
القيود
- الفهارس الجزئية لا تدعم
ORDER BYأوUNIQUEما لم يكن المرشح مؤهلا.
فهارس النص
فهارس النصوص هي هياكل بيانات خاصة تقوم بتحسين الاستعلامات النصية، مما يجعلها أسرع وأكثر كفاءة.
استخدم الطريقة createIndex مع text خيار إنشاء فهرس نصي في title الحقل.
use cosmicworks;
db.products.createIndex({ title: "text" })
إشعار
بينما يمكنك تعريف فهرس نصي واحد فقط لكل مجموعة، يتيح Azure DocumentDB إنشاء فهارس نصية على مجموعة من عدة حقول لتمكينك من إجراء عمليات بحث نصية عبر حقول مختلفة في مستنداتك.
تكوين خيارات فهرس النص
تأتي الفهارس النصية في Azure DocumentDB مع عدة خيارات لتخصيص سلوكها. على سبيل المثال، يمكنك تحديد اللغة لتحليل النصوص، وتحديد الأوزان لإعطاء الأولوية لبعض الحقول، وتكوين عمليات البحث غير الحساسة للحرف. إليك مثال على إنشاء فهرس نصي مع خيارات:
أنشئ فهرسا لدعم البحث في كل من الحقول
titleوالذينcontentيدعمون اللغة الإنجليزية. أيضا، خصص أوزانا أعلى للمجالtitleلترتيب أولوياته في نتائج البحث.use cosmicworks db.products.createIndex( { title: "text", content: "text" }, { default_language: "english", weights: { title: 10, content: 5 }, caseSensitive: false } )
إشعار
عندما يقوم العميل بإجراء استعلام بحث نصي باستخدام مصطلح "DocumentDB"، يتم حساب الدرجة لكل مستند في المجموعة بناء على وجود وتكرار المصطلح في كل من حقلي "العنوان" و"المحتوى"، مع إعطاء أهمية أكبر لحقل "العنوان" بسبب وزنه الأعلى.
قم بإجراء بحث نصي باستخدام فهرس نصي
بمجرد إنشاء فهرس النص، يمكنك إجراء عمليات بحث نصية باستخدام عامل "text" في استفساراتك. يقوم مشغل النص بأخذ سلسلة بحث ومطابقتها مع فهرس النص للعثور على المستندات ذات الصلة.
قم بإجراء بحث نصي عن العبارة
DocumentDB.use cosmicworks db.products.find( { $text: { $search: "DocumentDB" } } )اختياريا، استخدم عامل
$metaالإسقاط معtextScoreالحقل في الاستعلام لرؤية الوزنuse cosmicworks db.products.find( { $text: { $search: "DocumentDB" } }, { score: { $meta: "textScore" } } )
القيود
- يمكن تعريف فهرس نصي واحد فقط على مجموعة.
- عمليات الفرز لا يمكنها استخدام ترتيب فهرس النص في MongoDB.
- Hint() غير مدعوم مع استعلام يستخدم تعبير $text.
- يمكن أن تكون فهارس النصوص كبيرة نسبيا، حيث تستهلك مساحة تخزين كبيرة مقارنة بأنواع الفهارس الأخرى.
مؤشرات الوايلد كارد
فهرسة على حقل واحد، يفهرس جميع المسارات تحت ، field مع استثناء الحقول الأخرى التي تقع على نفس المستوى. على سبيل المثال، في المستند النموذجي التالي
{
"children":
{
"familyName": "Merriam",
"pets": { "details": {“name”: "Goofy", ”age”: 3} }
}
}
إنشاء فهرس على { "pets.$**": 1 } ينشئ فهرسا على التفاصيل وخصائص المستندات الفرعية لكنه لا ينشئ فهرسا على "familyName".
القيود
- لا يمكن لفهارس الوايلد كارد دعم الفهارس الفريدة.
- فهارس البطاقات البرية لا تدعم الدفع للأسفل إلا
ORDER BYإذا كان الفلتر يتضمن فقط المسارات الموجودة في البطاقة البرية (لأنها لا تفهرس عناصر غير معرفة) - يمكن أن يحتوي فهرس البطاقة الجامحة المركب فقط على
oneمصطلحاتoneوأخرى أو أكثر من مصطلحات الفهرس.{ "pets.$**": 1, “familyName”: 1 }
الفهارس الجغرافية المكانية
تدعم الفهارس الجغرافية المكانية الاستعلامات على البيانات المخزنة ككائنات GeoJSON أو أزواج إحداثيات قديمة. يمكنك استخدام الفهارس الجغرافية لتحسين الأداء للاستعلامات على البيانات الجغرافية المكانية أو لتشغيل بعض الاستعلامات الجغرافية المكانية.
يوفر Azure DocumentDB نوعين من الفهارس الجغرافية المكانية:
- فهارس 2dsphere، التي تدعم الاستعلامات التي تفسر الهندسة على الكرة.
- فهارس ثنائية الأبعاد، التي تدعم الاستعلامات التي تفسر الهندسة على سطح مستو.
الفهارس ثنائية الأبعاد
تدعم الفهارس ثنائية الأبعاد فقط من خلال نمط زوج الإحداثيات القديم لتخزين البيانات الجغرافية المكانية.
استخدم الطريقة createIndex مع 2d خيار إنشاء مؤشر location جغرافي على الملعب.
db.places.createIndex({ "location": "2d"});
القيود
- يمكن أن يكون حقل الموقع فقط
oneجزءا من2dالفهرس، ولا يمكنcompound 2dأن يكون جزءا من الفهرس إلاoneالحقول غير الجغرافية الأخرىdb.places.createIndex({ "location": "2d", "non-geospatial-field": 1 / -1 })
مؤشرات 2dsphere
2dsphere تدعم الفهارس الاستعلامات الجغرافية المكانية على كرة شبيهة بالأرض. يمكنه دعم كائنات GeoJSON أو أزواج الإحداثيات القديمة.
2dSphere تعمل الفهارس مع أسلوب GeoJSON لتخزين البيانات، وإذا تم العثور على نقاط قديمة تحويلها إلى نقطة GeoJSON.
استخدم الطريقة createIndex مع 2dsphere خيار إنشاء مؤشر location جغرافي على الملعب.
db.places.createIndex({ "location": "2dsphere"});
2dsphere تسمح الفهارس بإنشاء فهارس على عدة حقول بيانات جغرافية مكانية ومتعددة غير مكانية.
db.places.createIndex({ "location": "2d", "non-geospatial-field": 1 / -1, ... "more non-geospatial-field": 1 / -1 })
القيود
لا يدعم الفهرس المركب باستخدام فهرس عادي وجغرافي مكاني. إنشاء أي من الفهارس الجغرافية المكانية سيؤدي إلى أخطاء.
// Compound Regular & 2dsphere indexes are not supported yet db.collection.createIndex({a: 1, b: "2dsphere"}) // Compound 2d indexes are not supported yet db.collection.createIndex({a: "2d", b: 1})المضلعات التي تحتوي على ثقوب لا تعمل. إدخال مضلع به ثقب غير مقيد رغم
$geoWithinفشل الاستعلام في السيناريوهات:إذا كان الاستعلام نفسه يحتوي على مضلع به ثقوب
coll.find( { "b": { "$geoWithin": { "$geometry": { "coordinates": [ [ [ 0, 0], [0, 10], [10, 10],[10,0],[0, 0] ], [ [5, 5], [8, 5], [ 8, 8], [ 5, 8], [ 5, 5] ] ], "type": "Polygon" } } } }) // MongoServerError: $geoWithin currently doesn't support polygons with holesإذا كان هناك أي مستند غير مفلتر يحتوي على مضلع به ثقوب.
[mongos] test> coll.find() [ { _id: ObjectId("667bf7560b4f1a5a5d71effa"), b: { type: 'Polygon', coordinates: [ [ [ 0, 0 ], [ 0, 10 ], [ 10, 10 ], [ 10, 0 ], [ 0, 0 ] ], [ [ 5, 5 ], [ 8, 5 ], [ 8, 8 ], [ 5, 8 ], [ 5, 5 ] ] ] } } ] // MongoServerError: $geoWithin currently doesn't support polygons with holeskeyالحقل إلزامي عند استخدامgeoNear.[mongos] test> coll.aggregate([{ $geoNear: { $near: { "type": "Point", coordinates: [0, 0] } } }]) // MongoServerError: $geoNear requires a 'key' option as a String
الخطوات التالية
- تعرف على الفهرسة وأفضل الممارسات لتحقيق أكثر النتائج كفاءة.
- تعرف على فهرسة الخلفية
- تعلم هنا للعمل مع فهرسة النصوص.
- تعرف هنا على فهرسة البطاقات البرية.