مخزن المتجهات في 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>
في النتائج. ثم يتم عرض المستند أيضا ككائن متداخل. لاحظ أن درجة التشابه يتم حسابها باستخدام المقياس المحدد في فهرس المتجه.
ناقلات الاستعلام ومسافات المتجهات (المعروفة أيضا بدرجات التشابه) باستخدام $search"
متابعة للمثال الأخير، قم بإنشاء متجه آخر، 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 الخاص بك. تعرف على المزيد من هنا.
استخدم كقاعدة بيانات متجهة مع 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. تمكنك من فتح الإمكانات الكاملة لبياناتك عبر تضمينات المتجهات، وتمكنك من إنشاء تطبيقات أكثر دقة وكفاءة وقوة.
المحتوى ذو الصلة
- حل مرجع البيع بالتجزئة لنمط .NET RAG
- البرنامج التعليمي .NET - روبوت الدردشة الوصفة
- نمط C# RAG - دمج Open الذكاء الاصطناعي Services مع Cosmos
- نمط Python RAG - روبوت دردشة منتج Azure
- البرنامج التعليمي لدفتر ملاحظات Python - تكامل قاعدة بيانات المتجهات من خلال LangChain
- البرنامج التعليمي لدفتر ملاحظات Python - تكامل التخزين المؤقت LLM من خلال LangChain
- Python - تكامل LlamaIndex
- Python - تكامل ذاكرة Kernel الدلالية