متجهات الفهرس والاستعلام في Azure Cosmos DB ل NoSQL في .NET.

ينطبق على: NoSQL

البحث عن المتجهات في Azure Cosmos DB ل NoSQL هو حاليا ميزة معاينة. مطلوب منك التسجيل للمعاينة قبل الاستخدام. تتناول هذه المقالة الخطوات التالية:

  1. التسجيل لمعاينة Vector Search في Azure Cosmos DB ل NoSQL
  2. إعداد حاوية Azure Cosmos DB للبحث عن المتجهات
  3. نهج تضمين متجه التأليف
  4. إضافة فهارس متجهة إلى نهج فهرسة الحاوية
  5. إنشاء حاوية مع فهارس متجهة ونهج تضمين المتجهات
  6. إجراء بحث متجه على البيانات المخزنة.
  7. يستعرض هذا الدليل عملية إنشاء بيانات المتجهات، وفهرسة البيانات، ثم الاستعلام عن البيانات في حاوية.

المتطلبات الأساسية

التسجيل للمعاينة

يتطلب البحث المتجه عن Azure Cosmos DB ل NoSQL تسجيل ميزة المعاينة. اتبع الخطوات التالية للتسجيل:

  1. انتقل إلى صفحة مورد Azure Cosmos DB for NoSQL.

  2. حدد جزء "الميزات" ضمن عنصر القائمة "الإعدادات".

  3. حدد ل "Vector Search in Azure Cosmos DB for NoSQL".

  4. اقرأ وصف الميزة لتأكيد رغبتك في التسجيل في المعاينة.

  5. حدد "Enable" للتسجيل في المعاينة.

إشعار

سيتم الموافقة التلقائية على طلب التسجيل، ولكن قد يستغرق سريانه عدة دقائق.

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

لنأخذ مثالا على إنشاء قاعدة بيانات لمكتبة مستندة إلى الإنترنت وأنت تخزن العنوان والكاتب و ISBN والوصف لكل كتاب. كما نقوم بتعريف خاصيتين لاحتواء تضمينات المتجهات. الأولى هي الخاصية "contentVector"، التي تحتوي على تضمينات نصية تم إنشاؤها من محتوى النص للكتاب (على سبيل المثال، تسلسل خصائص "author" "author" "isbn" و"description" قبل إنشاء التضمين). والثاني هو "coverImageVector"، الذي يتم إنشاؤه من صور غلاف الكتاب.

  1. قم بإنشاء وتخزين تضمينات المتجهات للحقل التي تريد إجراء بحث متجه عليها.
  2. حدد مسارات تضمين المتجه في نهج تضمين المتجه.
  3. قم بتضمين أي فهارس متجهة مطلوبة في نهج الفهرسة للحاوية.

بالنسبة للأقسام اللاحقة من هذه المقالة، نعتبر البنية أدناه للعناصر المخزنة في حاويتنا:

{
"title": "book-title", 
"author": "book-author", 
"isbn": "book-isbn", 
"description": "book-description", 
"contentVector": [2, -1, 4, 3, 5, -2, 5, -7, 3, 1], 
"coverImageVector": [0.33, -0.52, 0.45, -0.67, 0.89, -0.34, 0.86, -0.78] 
} 

إنشاء نهج تضمين متجه للحاوية الخاصة بك.

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

  • "path": مسار الخاصية الذي يحتوي على متجهات
  • "نوع البيانات": نوع عناصر المتجه (الافتراضي Float32)
  • "الأبعاد": طول كل متجه في المسار (الافتراضي 1536)
  • "distanceFunction": المقياس المستخدم لحساب المسافة/التشابه (جيب التمام الافتراضي)

على سبيل المثال مع تفاصيل الكتاب، يمكن أن يبدو نهج المتجه مثل مثال JSON أدناه:

  Database db = await client.CreateDatabaseIfNotExistsAsync("vector-benchmarking");
  List<Embedding> embeddings = new List<Embedding>()
  {
      new Embedding()
      {
          Path = "/coverImageVector",
          DataType = VectorDataType.Float32,
          DistanceFunction = DistanceFunction.Cosine,
          Dimensions = 8,
      },
      new Embedding()
      {
          Path = "/contentVector",
          DataType = VectorDataType.Float32,
          DistanceFunction = DistanceFunction.Cosine,
          Dimensions = 10,
      }
  };

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

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

  Collection<Embedding> collection = new Collection<Embedding>(embeddings);
  ContainerProperties properties = new ContainerProperties(id: "vector-container", partitionKeyPath: "/id")
  {   
      VectorEmbeddingPolicy = new(collection),
      IndexingPolicy = new IndexingPolicy()
      {
          VectorIndexes = new()
          {
              new VectorIndexPath()
              {
                  Path = "/vector",
                  Type = VectorIndexType.QuantizedFlat,
              }
          }
      },
  };

هام

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

تشغيل استعلام البحث عن تشابه المتجهات

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

SELECT c.title, VectorDistance(c.contentVector, [1,2,3,4,5,6,7,8,9,10]) AS SimilarityScore   
FROM c  
ORDER BY VectorDistance(c.contentVector, [1,2,3,4,5,6,7,8,9,10])   

يسترد هذا الاستعلام عناوين الكتاب جنبا إلى جنب مع درجات التشابه فيما يتعلق بالاستعلام الخاص بك. فيما يلي مثال في .NET:

  float[] embedding = {1f,2f,3f,4f,5f,6f,7f,8f,9f,10f};
  var queryDef = new QueryDefinition(
      query: $"SELECT c.title, VectorDistance(c.contentVector,@embedding) AS SimilarityScore FROM c ORDER BY VectorDistance(c.contentVector,@embedding)"
      ).WithParameter("@embedding", embedding);
  using FeedIterator<Object> feed = container.GetItemQueryIterator<Object>(
      queryDefinition: queryDef
  );
  while (feed.HasMoreResults) 
  {
      FeedResponse<Object> response = await feed.ReadNextAsync();
      foreach ( Object item in response)
      {
          Console.WriteLine($"Found item:\t{item}");
      }
  }

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