مخزن المتجهات في Azure Cosmos DB ل MongoDB vCore

ينطبق على: MongoDB vCore

استخدم قاعدة بيانات المتجهات المتكاملة في Azure Cosmos DB ل MongoDB vCore لتوصيل التطبيقات المستندة إلى الذكاء الاصطناعي بسلاسة بالبيانات المخزنة في Azure Cosmos DB. يمكن أن يتضمن هذا التكامل التطبيقات التي أنشأتها باستخدام تضمينات Azure OpenAI. تمكنك قاعدة البيانات المتجهة المتكاملة أصلا من تخزين بيانات المتجهات عالية الأبعاد وفهرستها والاستعلام عنها بكفاءة والتي يتم تخزينها مباشرة في Azure Cosmos DB ل MongoDB vCore، إلى جانب البيانات الأصلية التي يتم إنشاء بيانات المتجه منها. فهو يلغي الحاجة إلى نقل بياناتك إلى مخازن ناقلات بديلة ويتحمل تكاليف إضافية.

ما هو مخزن المتجهات؟

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

كيف يعمل مخزن المتجهات؟

في مخزن المتجهات، يتم استخدام خوارزميات بحث المتجهات للفهرسة والاستعلام عن تضمينات. تتضمن بعض خوارزميات البحث عن المتجهات المعروفة «Hierarchical Navigable Small World ( HNSW) و Inverted File (IVF) و DiskANN وما إلى ذلك. البحث عن المتجهات هو أسلوب يساعدك على العثور على عناصر مماثلة استنادا إلى خصائص البيانات الخاصة بها بدلا من التطابقات الدقيقة في حقل الخاصية. هذه التقنية مفيدة في التطبيقات مثل البحث عن نص مشابه أو العثور على الصور ذات الصلة أو تقديم التوصيات أو حتى اكتشاف الحالات الشاذة. يتم استخدامه للاستعلام عن تضمينات المتجهات (قوائم الأرقام) للبيانات التي قمت بإنشائها باستخدام نموذج التعلم الآلي باستخدام واجهة برمجة تطبيقات التضمينات. أمثلة على تضمين واجهات برمجة التطبيقات هي تضمينات Azure OpenAI أو عناق الوجه على Azure. يقيس بحث المتجه المسافة بين متجهات البيانات ومتجه الاستعلام. متجهات البيانات الأقرب إلى متجه الاستعلام هي تلك التي تم العثور عليها على أنها متشابهة دلاليا.

في قاعدة بيانات الخطوط المتجهة المتكاملة في Azure Cosmos DB ل MongoDB vCore، يمكن تخزين التضمينات وفهرستها والاستعلامات إليها جنبا إلى جنب مع البيانات الأصلية. يلغي هذا النهج التكلفة الإضافية لنسخ البيانات في قاعدة بيانات متجهات خالصة منفصلة. علاوة على ذلك، تحافظ هذه البنية على تضمينات المتجهات والبيانات الأصلية معا، ما يسهل عمليات البيانات متعددة الوسائط بشكل أفضل، ويتيح المزيد من تناسق البيانات وحجمها وأدائها.

إنشاء فهرس متجه

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

إنشاء فهرس متجه باستخدام HNSW

يمكنك إنشاء فهارس (Hierarchical Navigable Small World) على مستويات نظام مجموعة M40 وأعلى. لإنشاء فهرس HSNW، تحتاج إلى إنشاء فهرس متجه مع تعيين المعلمة "kind" إلى "vector-hnsw" اتباع القالب أدناه:

{ 
    "createIndexes": "<collection_name>",
    "indexes": [
        {
            "name": "<index_name>",
            "key": {
                "<path_to_property>": "cosmosSearch"
            },
            "cosmosSearchOptions": { 
                "kind": "vector-hnsw", 
                "m": <integer_value>, 
                "efConstruction": <integer_value>, 
                "similarity": "<string_value>", 
                "dimensions": <integer_value> 
            } 
        } 
    ] 
}
الحقل نوع الوصف
index_name سلسلة اسم فريد للفهرس.
path_to_property سلسلة المسار إلى الخاصية التي تحتوي على المتجه. يمكن أن يكون هذا المسار خاصية من المستوى الأعلى أو مسار تدوين نقطة إلى الخاصية . إذا تم استخدام مسار تدوين نقطة، فلا يمكن أن تكون جميع العناصر غير الخارجية صفائف. يجب أن تكون المتجهات لتكون number[] مفهرسة وإرجاعها في نتائج بحث المتجهات.
kind سلسلة نوع فهرس المتجهات المراد إنشاؤه. الخيارات هي vector-ivf و vector-hnsw. ملاحظة vector-ivf متاحة على جميع طبقات vector-hnsw نظام المجموعة وهي متوفرة على مستويات نظام المجموعة M40 وأعلى.
m integer الحد الأقصى لعدد الاتصالات لكل طبقة (16 بشكل افتراضي، الحد الأدنى للقيمة هو 2، الحد الأقصى للقيمة هو 100). أعلى m مناسبة لمجموعات البيانات ذات الأبعاد العالية و/أو متطلبات الدقة العالية.
efConstruction integer حجم قائمة المرشحين الديناميكية لإنشاء الرسم البياني (64 بشكل افتراضي، الحد الأدنى للقيمة هو 4، الحد الأقصى للقيمة هو 1000). سيؤدي ارتفاع efConstruction إلى تحسين جودة الفهرس ودقة أعلى، ولكنه سيزيد أيضا من الوقت المطلوب لإنشاء الفهرس. efConstruction يجب أن يكون على الأقل 2 * m
similarity سلسلة مقياس التشابه لاستخدامه مع الفهرس. الخيارات المحتملة هي COS (مسافة جيب التمام)، L2 (مسافة الإقليديين)، و IP (المنتج الداخلي).
dimensions integer عدد الأبعاد لتشابه المتجهات. الحد الأقصى لعدد الأبعاد المدعومة هو 2000.

إجراء بحث متجه باستخدام HNSW

لإجراء بحث متجه، استخدم $search مرحلة مسار التجميع الاستعلام مع cosmosSearch عامل التشغيل.

{
    "$search": {
        "cosmosSearch": {
            "vector": <query_vector>,
            "path": "<path_to_property>",
            "k": <num_results_to_return>,
            "efSearch": <integer_value>
        },
    }
  }
}

الحقل نوع ‏‏الوصف
efSearch integer حجم قائمة المرشحين الديناميكية للبحث (40 بشكل افتراضي). توفر القيمة الأعلى تذكرا أفضل على حساب السرعة.
k integer عدد النتائج التي يجب إرجاعها. يجب أن يكون أقل من أو يساوي efSearch

إشعار

يمكن أن يؤدي إنشاء فهرس HSNW مع مجموعات بيانات كبيرة إلى نفاد الذاكرة في Azure Cosmos DB لمورد MongoDB vCore، أو يمكن أن يحد من أداء العمليات الأخرى التي تعمل على قاعدة البيانات الخاصة بك. إذا واجهت مثل هذه المشكلات، يمكن تخفيفها عن طريق تحجيم المورد الخاص بك إلى مستوى نظام مجموعة أعلى، أو تقليل حجم مجموعة البيانات.

إنشاء فهرس متجه باستخدام IVF

لإنشاء فهرس متجه باستخدام خوارزمية IVF (ملف معكوس)، استخدم القالب التالي createIndexes وقم بتعيين المعلمة "kind" إلى "vector-ivf":

{
  "createIndexes": "<collection_name>",
  "indexes": [
    {
      "name": "<index_name>",
      "key": {
        "<path_to_property>": "cosmosSearch"
      },
      "cosmosSearchOptions": {
        "kind": "vector-ivf",
        "numLists": <integer_value>,
        "similarity": "<string_value>",
        "dimensions": <integer_value>
      }
    }
  ]
}
الحقل نوع الوصف
index_name سلسلة اسم فريد للفهرس.
path_to_property سلسلة المسار إلى الخاصية التي تحتوي على المتجه. يمكن أن يكون هذا المسار خاصية من المستوى الأعلى أو مسار تدوين نقطة إلى الخاصية . إذا تم استخدام مسار تدوين نقطة، فلا يمكن أن تكون جميع العناصر غير الخارجية صفائف. يجب أن تكون المتجهات لتكون number[] مفهرسة وإرجاعها في نتائج بحث المتجهات.
kind سلسلة نوع فهرس المتجهات المراد إنشاؤه. الخيارات هي vector-ivf و vector-hnsw. ملاحظة vector-ivf متاحة على جميع طبقات vector-hnsw نظام المجموعة وهي متوفرة على مستويات نظام المجموعة M40 وأعلى.
numLists integer هذا العدد الصحيح هو عدد المجموعات التي يستخدمها فهرس الملف المعكوس (IVF) لتجميع بيانات المتجه. ونوصي بإعداد numLists documentCount/1000 ما يصل إلى مليون مستند وإلى sqrt(documentCount) أكثر من مليون مستند. numLists استخدام قيمة 1 هو أقرب إلى إجراء بحث القوة الغاشمة، والتي لديها أداء محدود.
similarity سلسلة مقياس التشابه لاستخدامه مع الفهرس. الخيارات المحتملة هي COS (مسافة جيب التمام)، L2 (مسافة الإقليديين)، و IP (المنتج الداخلي).
dimensions integer عدد الأبعاد لتشابه المتجهات. الحد الأقصى لعدد الأبعاد المدعومة هو 2000.

هام

يعد تعيين المعلمة numLists بشكل صحيح أمرا مهما لتحقيق دقة وأداء جيدين. ونوصي بإعداد numLists documentCount/1000 ما يصل إلى مليون مستند وإلى sqrt(documentCount) أكثر من مليون مستند.

مع زيادة عدد العناصر في قاعدة البيانات الخاصة بك، يجب ضبط numLists لتكون أكبر من أجل تحقيق أداء زمن انتقال جيد للبحث في المتجهات.

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

إجراء بحث متجه باستخدام IVF

لإجراء بحث متجه، استخدم $search مرحلة مسار التجميع في استعلام MongoDB. لاستخدام الفهرس cosmosSearch ، استخدم عامل التشغيل الجديد cosmosSearch .

{
  {
  "$search": {
    "cosmosSearch": {
        "vector": <query_vector>,
        "path": "<path_to_property>",
        "k": <num_results_to_return>,
      },
      "returnStoredSource": True }},
  {
    "$project": { "<custom_name_for_similarity_score>": {
           "$meta": "searchScore" },
            "document" : "$$ROOT"
        }
  }
}

لاسترداد درجة التشابه (searchScore) مع المستندات التي تم العثور عليها بواسطة البحث المتجه، استخدم $project عامل التشغيل لتضمينها searchScore وإعادة تسميتها كما <custom_name_for_similarity_score> في النتائج. ثم يتم عرض المستند أيضا ككائن متداخل. لاحظ أن درجة التشابه يتم حسابها باستخدام المقياس المحدد في فهرس المتجه.

هام

يجب أن تكون المتجهات لتكون number[] مفهرسة. يؤدي استخدام نوع آخر، مثل double[]، إلى منع فهرسة المستند. لن يتم إرجاع المستندات غير المفهرسة في نتيجة بحث متجه.

مثال باستخدام فهرس HNSW.

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

use test;

db.createCollection("exampleCollection");

db.runCommand({ 
    "createIndexes": "exampleCollection",
    "indexes": [
        {
            "name": "VectorSearchIndex",
            "key": {
                "contentVector": "cosmosSearch"
            },
            "cosmosSearchOptions": { 
                "kind": "vector-hnsw", 
                "m": 16, 
                "efConstruction": 64, 
                "similarity": "COS", 
                "dimensions": 3
            } 
        } 
    ] 
});

ينشئ هذا الأمر فهرس HNSW مقابل الخاصية contentVector في المستندات المخزنة في المجموعة المحددة، exampleCollection. cosmosSearchOptions تحدد الخاصية معلمات فهرس متجه HNSW. إذا كان المستند يحتوي على المتجه المخزن في خاصية متداخلة، يمكنك تعيين هذه الخاصية باستخدام مسار تدوين نقطة. على سبيل المثال، قد تستخدم text.contentVector ما إذا كان contentVector هو نوع فرعي من text.

إضافة متجهات إلى قاعدة البيانات

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

db.exampleCollection.insertMany([
  {name: "Eugenia Lopez", bio: "Eugenia is the CEO of AdvenureWorks.", vectorContent: [0.51, 0.12, 0.23]},
  {name: "Cameron Baker", bio: "Cameron Baker CFO of AdvenureWorks.", vectorContent: [0.55, 0.89, 0.44]},
  {name: "Jessie Irwin", bio: "Jessie Irwin is the former CEO of AdventureWorks and now the director of the Our Planet initiative.", vectorContent: [0.13, 0.92, 0.85]},
  {name: "Rory Nguyen", bio: "Rory Nguyen is the founder of AdventureWorks and the president of the Our Planet initiative.", vectorContent: [0.91, 0.76, 0.83]},
]);

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

const queryVector = [0.52, 0.28, 0.12];
db.exampleCollection.aggregate([
  {
    "$search": {
        "cosmosSearch": {
            "vector": "queryVector",
            "path": "contentVector",
            "k": 2,
            "efSearch": 40
        },
    }
  }
}
]);

في هذا المثال، يتم إجراء بحث متجه باستخدام queryVector كمدخل عبر Mongo shell. نتيجة البحث هي قائمة من عنصرين أكثر تشابها مع متجه الاستعلام، تم فرزهما حسب درجات التشابه الخاصة بهم.

[
  {
    similarityScore: 0.9465376,
    document: {
      _id: ObjectId("645acb54413be5502badff94"),
      name: 'Eugenia Lopez',
      bio: 'Eugenia is the CEO of AdvenureWorks.',
      vectorContent: [ 0.51, 0.12, 0.23 ]
    }
  },
  {
    similarityScore: 0.9006955,
    document: {
      _id: ObjectId("645acb54413be5502badff97"),
      name: 'Rory Nguyen',
      bio: 'Rory Nguyen is the founder of AdventureWorks and the president of the Our Planet initiative.',
      vectorContent: [ 0.91, 0.76, 0.83 ]
    }
  }
]

الحصول على تعريفات فهرس المتجهات

لاسترداد تعريف فهرس المتجهات من المجموعة، استخدم listIndexes الأمر :

db.exampleCollection.getIndexes();

في هذا المثال، vectorIndex يتم إرجاع مع كافة cosmosSearch المعلمات التي تم استخدامها لإنشاء الفهرس:

[
  { v: 2, key: { _id: 1 }, name: '_id_', ns: 'test.exampleCollection' },
  {
    v: 2,
    key: { contentVector: 'cosmosSearch' },
    name: 'vectorSearchIndex',
    cosmosSearch: {
      kind: 'vector-hnsw',
      m: 40,
      efConstruction: 64,
      similarity: 'COS',
      dimensions: 3
    },
    ns: 'test.exampleCollection'
  }
]

مثال على استخدام فهرس IVF

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

numListتحدد المعلمة s عدد المجموعات التي سيتم إنشاؤها. يشير نظام مجموعة واحد إلى إجراء البحث ضد جميع المتجهات في قاعدة البيانات، مثل القوة الغاشمة أو البحث kNN. يوفر هذا الإعداد أعلى دقة ولكن أيضا أعلى زمن انتقال.

تؤدي زيادة القيمة إلى numLists المزيد من المجموعات، كل منها يحتوي على عدد أقل من المتجهات. على سبيل المثال، إذا ، numLists=2تحتوي كل مجموعة على خطوط متجهة أكثر من إذا numLists=3، وهكذا. عدد أقل من المتجهات لكل مجموعة يسرع البحث (زمن انتقال أقل، استعلامات أعلى في الثانية). ومع ذلك، يزيد هذا من احتمال فقدان المتجه الأكثر تشابها في قاعدة البيانات الخاصة بك إلى متجه الاستعلام. ويرجع ذلك إلى الطبيعة غير كاملة للمجموعات، حيث قد يركز البحث على مجموعة واحدة بينما يوجد المتجه "الأقرب" الفعلي في مجموعة مختلفة.

nProbes تتحكم المعلمة في عدد المجموعات التي سيتم البحث فيها. بشكل افتراضي، يتم تعيينه إلى 1، ما يعني أنه يبحث فقط في نظام المجموعة مع المركز الأقرب إلى متجه الاستعلام. تسمح زيادة هذه القيمة للبحث بتغطية المزيد من المجموعات، وتحسين الدقة ولكن أيضا زيادة زمن الانتقال (وبالتالي تقليل الاستعلامات في الثانية) حيث يتم البحث في المزيد من المجموعات والخطوط المتجهة.

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

إنشاء فهرس متجه

use test;

db.createCollection("exampleCollection");

db.runCommand({
  createIndexes: 'exampleCollection',
  indexes: [
    {
      name: 'vectorSearchIndex',
      key: {
        "vectorContent": "cosmosSearch"
      },
      cosmosSearchOptions: {
        kind: 'vector-ivf',
        numLists: 3,
        similarity: 'COS',
        dimensions: 3
      }
    }
  ]
});

ينشئ هذا الأمر فهرسا vector-ivf مقابل الخاصية vectorContent في المستندات المخزنة في المجموعة المحددة، exampleCollection. cosmosSearchOptions تحدد الخاصية معلمات فهرس متجه IVF. إذا كان المستند يحتوي على المتجه المخزن في خاصية متداخلة، يمكنك تعيين هذه الخاصية باستخدام مسار تدوين نقطة. على سبيل المثال، قد تستخدم text.vectorContent ما إذا كان vectorContent هو نوع فرعي من text.

إضافة متجهات إلى قاعدة البيانات

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

db.exampleCollection.insertMany([
  {name: "Eugenia Lopez", bio: "Eugenia is the CEO of AdvenureWorks.", vectorContent: [0.51, 0.12, 0.23]},
  {name: "Cameron Baker", bio: "Cameron Baker CFO of AdvenureWorks.", vectorContent: [0.55, 0.89, 0.44]},
  {name: "Jessie Irwin", bio: "Jessie Irwin is the former CEO of AdventureWorks and now the director of the Our Planet initiative.", vectorContent: [0.13, 0.92, 0.85]},
  {name: "Rory Nguyen", bio: "Rory Nguyen is the founder of AdventureWorks and the president of the Our Planet initiative.", vectorContent: [0.91, 0.76, 0.83]},
]);

إجراء بحث متجه

لإجراء بحث متجه، استخدم $search مرحلة مسار التجميع في استعلام MongoDB. لاستخدام الفهرس cosmosSearch ، استخدم عامل التشغيل الجديد cosmosSearch .

{
  {
  "$search": {
    "cosmosSearch": {
        "vector": <vector_to_search>,
        "path": "<path_to_property>",
        "k": <num_results_to_return>,
      },
      "returnStoredSource": True }},
  {
    "$project": { "<custom_name_for_similarity_score>": {
           "$meta": "searchScore" },
            "document" : "$$ROOT"
        }
  }
}

لاسترداد درجة التشابه (searchScore) مع المستندات التي تم العثور عليها بواسطة البحث المتجه، استخدم $project عامل التشغيل لتضمينها searchScore وإعادة تسميتها كما <custom_name_for_similarity_score> في النتائج. ثم يتم عرض المستند أيضا ككائن متداخل. لاحظ أن درجة التشابه يتم حسابها باستخدام المقياس المحدد في فهرس المتجه.

متابعة للمثال الأخير، قم بإنشاء متجه آخر، queryVector. يقيس البحث المتجه المسافة بين queryVector المتجهات والمتجهة في vectorContent مسار المستندات. يمكنك تعيين عدد النتائج التي يرجعها البحث عن طريق تعيين المعلمة k، التي تم تعيينها إلى 2 هنا. يمكنك أيضا تعيين nProbes، وهو عدد صحيح يتحكم في عدد المجموعات القريبة التي يتم فحصها في كل بحث. قد تحسن القيمة الأعلى الدقة، ولكن البحث سيكون أبطأ نتيجة لذلك. هذه معلمة اختيارية بقيمة افتراضية 1 ولا يمكن أن تكون أكبر من numLists القيمة المحددة في فهرس المتجه.

const queryVector = [0.52, 0.28, 0.12];
db.exampleCollection.aggregate([
  {
    $search: {
      "cosmosSearch": {
        "vector": queryVector,
        "path": "vectorContent",
        "k": 2
      },
    "returnStoredSource": true }},
  {
    "$project": { "similarityScore": {
           "$meta": "searchScore" },
            "document" : "$$ROOT"
        }
  }
]);

في هذا المثال، يتم إجراء بحث متجه باستخدام queryVector كمدخل عبر Mongo shell. نتيجة البحث هي قائمة من عنصرين أكثر تشابها مع متجه الاستعلام، تم فرزهما حسب درجات التشابه الخاصة بهم.

[
  {
    similarityScore: 0.9465376,
    document: {
      _id: ObjectId("645acb54413be5502badff94"),
      name: 'Eugenia Lopez',
      bio: 'Eugenia is the CEO of AdvenureWorks.',
      vectorContent: [ 0.51, 0.12, 0.23 ]
    }
  },
  {
    similarityScore: 0.9006955,
    document: {
      _id: ObjectId("645acb54413be5502badff97"),
      name: 'Rory Nguyen',
      bio: 'Rory Nguyen is the founder of AdventureWorks and the president of the Our Planet initiative.',
      vectorContent: [ 0.91, 0.76, 0.83 ]
    }
  }
]

الحصول على تعريفات فهرس المتجهات

لاسترداد تعريف فهرس المتجهات من المجموعة، استخدم listIndexes الأمر :

db.exampleCollection.getIndexes();

في هذا المثال، vectorIndex يتم إرجاع مع كافة cosmosSearch المعلمات التي تم استخدامها لإنشاء الفهرس:

[
  { v: 2, key: { _id: 1 }, name: '_id_', ns: 'test.exampleCollection' },
  {
    v: 2,
    key: { vectorContent: 'cosmosSearch' },
    name: 'vectorSearchIndex',
    cosmosSearch: {
      kind: 'vector-ivf',
      numLists: 3,
      similarity: 'COS',
      dimensions: 3
    },
    ns: 'test.exampleCollection'
  }
]

بحث متجه تمت تصفيته (معاينة)

يمكنك الآن تنفيذ عمليات البحث الموجهة باستخدام أي عامل تصفية استعلام معتمد مثل $ltو$eq$lte$nin$gte$neq$gt$in.$regex قم بتمكين ميزة "تصفية البحث عن المتجهات" في علامة التبويب "ميزات المعاينة" في اشتراك Azure الخاص بك. تعرف على المزيد حول ميزات المعاينة هنا.

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

db.runCommand({ 
     "createIndexes": "<collection_name",
    "indexes": [ {
        "key": { 
            "<property_to_filter>": 1 
               }, 
        "name": "<name_of_filter_index>" 
    }
    ] 
});

بعد ذلك، يمكنك إضافة "filter" المصطلح إلى بحث المتجه كما هو موضح أدناه. في هذا المثال، يبحث عامل التصفية عن مستندات حيث لا تكون الخاصية "title" ["not in this text", "or this text"]في قائمة .


db.exampleCollection.aggregate([
  {
      '$search': {
          "cosmosSearch": {
              "vector": "<query_vector>",
              "path": <path_to_vector>,
              "k": num_results,
              "filter": {<property_to_filter>: {"$nin": ["not in this text", "or this text"]}}
          },
          "returnStoredSource": True }},
      {'$project': { 'similarityScore': { '$meta': 'searchScore' }, 'document' : '$$ROOT' }
}
]);

هام

أثناء المعاينة، قد يتطلب منك البحث في المتجهات المصفاة ضبط معلمات فهرس المتجهات لتحقيق دقة أعلى. على سبيل المثال، قد تؤدي زيادة mأو أو عند efSearch استخدام HNSW أو numListsأو nProbes عند استخدام IVF efConstructionإلى نتائج أفضل. يجب اختبار التكوين قبل الاستخدام للتأكد من أن النتائج مرضية.

استخدام أدوات تنسيق LLM

استخدم كقاعدة بيانات متجهة مع Kernel الدلالي

استخدم Kernel الدلالي لتنسيق استرداد المعلومات من Azure Cosmos DB ل MongoDB vCore و LLM الخاص بك. تعرف على المزيد من هنا.

https://github.com/microsoft/semantic-kernel/tree/main/python/semantic_kernel/connectors/memory/azure_cosmosdb

استخدم كقاعدة بيانات متجهة مع LangChain

استخدم LangChain لتنسيق استرداد المعلومات من Azure Cosmos DB ل MongoDB vCore و LLM الخاص بك. تعرف على المزيد من هنا.

استخدم كذاكرة تخزين مؤقت دلالية مع LangChain

استخدم LangChain وAzure Cosmos DB ل MongoDB (vCore) لتنسيق التخزين المؤقت الدلالي، باستخدام استجابات LLM المعاد نسخها مسبقا والتي يمكن أن توفر لك تكاليف واجهة برمجة تطبيقات LLM وتقليل زمن الانتقال للاستجابات. تعرَّف على المزيد من هنا

الميزات والقيود

  • مقاييس المسافة المدعومة: L2 (إقليديان)، والمنتج الداخلي، والجيب المشترك.
  • أساليب الفهرسة المدعومة: IVFFLAT (GA) وHSNW (معاينة)
  • فهرسة المتجهات حتى 2000 بعد في الحجم.
  • تنطبق الفهرسة على متجه واحد فقط لكل مسار.
  • يمكن إنشاء فهرس واحد فقط لكل مسار متجه.

الملخص

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

الخطوة التالية