🚀 جرب Zilliz Cloud، الـ Milvus المدارة بالكامل، مجاناً — تجربة أداء أسرع بـ 10 أضعاف! جرب الآن>>

milvus-logo
LFAI
  • Home
  • Blog
  • كيفية استخدام بيانات السلاسل لتمكين تطبيقات البحث عن التشابه لديك

كيفية استخدام بيانات السلاسل لتمكين تطبيقات البحث عن التشابه لديك

  • Engineering
August 08, 2022
Xi Ge

Cover الغلاف

يأتي Milvus 2.1 مع بعض التحديثات المهمة التي تجعل العمل مع Milvus أسهل بكثير. أحدها هو دعم نوع بيانات السلاسل. في الوقت الحالي يدعم Milvus أنواع البيانات بما في ذلك السلاسل والمتجهات والمنطقيين والأعداد الصحيحة والأرقام ذات الفاصلة العائمة وغيرها.

تقدم هذه المقالة مقدمة لدعم نوع بيانات السلسلة. اقرأ وتعرف على ما يمكنك فعله به وكيفية استخدامه.

انتقل إلى:

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

على وجه التحديد، يدعم Milvus 2.1 Milvus 2.1 نوع البيانات VARCHAR، الذي يخزن سلاسل الأحرف ذات الأطوال المتفاوتة. مع دعم نوع بيانات VARCHAR، يمكنك:

  1. إدارة بيانات السلاسل مباشرةً دون مساعدة قاعدة بيانات علائقية خارجية.

يمكّنك دعم نوع بيانات VARCHAR من تخطي خطوة تحويل السلاسل إلى أنواع بيانات أخرى عند إدراج البيانات في Milvus. لنفترض أنك تعمل على نظام بحث عن الكتب لمتجر الكتب الخاص بك على الإنترنت. أنت تقوم بإنشاء مجموعة بيانات للكتب وتريد تحديد الكتب بأسمائها. بينما في الإصدارات السابقة حيث لا يدعم Milvus نوع بيانات السلسلة، قبل إدراج البيانات في MIilvus، قد تحتاج أولاً إلى تحويل السلاسل (أسماء الكتب) إلى معرّفات الكتب بمساعدة قاعدة بيانات علائقية مثل MySQL. في الوقت الحالي، نظرًا لأن نوع بيانات السلاسل مدعوم، يمكنك ببساطة إنشاء حقل سلسلة وإدخال أسماء الكتب مباشرةً بدلاً من أرقام معرفاتها.

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

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

  1. تسريع سرعة البحث الهجين والاستعلام المتجه من خلال تصفية السمات.

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

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

نعلم الآن أن نوع بيانات السلسلة مفيد للغاية، ولكن متى نحتاج بالضبط إلى استخدام نوع البيانات هذا في بناء تطبيقاتنا الخاصة؟ في ما يلي، سترى بعض الأمثلة البرمجية للسيناريوهات التي قد تتضمن بيانات السلسلة، والتي ستمنحك فهمًا أفضل لكيفية إدارة بيانات VARCHAR في Milvus 2.1.

إنشاء مجموعة

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

لاحظ أنه عند إنشاء حقل VARCHAR، من الضروري تحديد الحد الأقصى لطول الحرف عبر المعلمة max_length التي يمكن أن تتراوح قيمتها من 1 إلى 65,535 65,535. في هذا المثال، قمنا بتعيين الحد الأقصى للطول 200.

from pymilvus import CollectionSchema, FieldSchema, DataType
book_id = FieldSchema(
  name="book_id", 
  dtype=DataType.INT64, 
)
book_name = FieldSchema( 
  name="book_name", 
  dtype=DataType.VARCHAR, 
  max_length=200, 
  is_primary=True, 
)
word_count = FieldSchema(
  name="word_count", 
  dtype=DataType.INT64,  
)
book_intro = FieldSchema(
  name="book_intro", 
  dtype=DataType.FLOAT_VECTOR, 
  dim=2
)
schema = CollectionSchema(
  fields=[book_id, word_count, book_intro], 
  description="Test book search"
)
collection_name = "book"

إدراج البيانات

الآن بعد أن تم إنشاء المجموعة، يمكننا إدراج البيانات فيها. في المثال التالي، نقوم بإدراج 2000 صف من بيانات السلسلة التي تم إنشاؤها عشوائيًا.

import random
data = [
  [i for i in range(2000)],
  ["book_" + str(i) for i in range(2000)],
  [i for i in range(10000, 12000)],
  [[random.random() for _ in range(2)] for _ in range(2000)],
]

حذف البيانات

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

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

expr = "book_name in [\"book_0\", \"book_1\"]" 
from pymilvus import Collection
collection = Collection("book")     
collection.delete(expr)

إنشاء فهرس

يدعم ميلفوس 2.1 إنشاء فهارس عددية، مما يسرع بشكل كبير من تصفية حقول السلسلة. على عكس بناء فهرس متجه، لا يتعين عليك إعداد معلمات قبل بناء فهرس عددية. لا يدعم Milvus مؤقتًا سوى فهرس شجرة القاموس (MARISA-trie)، لذا فإن نوع فهرس الحقل من نوع VARCHAR هو MARISA-trie افتراضيًا.

يمكنك تحديد اسم الفهرس عند إنشائه. إذا لم يتم تحديده، فإن القيمة الافتراضية index_name هي "_default_idx_". في المثال أدناه، قمنا بتسمية الفهرس scalar_index.

from pymilvus import Collection
collection = Collection("book")   
collection.create_index(
  field_name="book_name", 
  index_name="scalar_index",
)

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

على سبيل المثال، إذا كنت تبحث عن الكتب التي تتشابه مقدمتها مع Hello Milvus ولكنك تريد فقط الحصول على الكتب التي تبدأ أسماؤها بـ "book_2"، يمكنك استخدام عامل التشغيل likeلإجراء مطابقة البادئة والحصول على الكتب المستهدفة، كما هو موضح في المثال أدناه.

search_param = {
  "data": [[0.1, 0.2]],
  "anns_field": "book_intro",
  "param": {"metric_type": "L2", "params": {"nprobe": 10}},
  "limit": 2,
  "expr": "book_name like \"Hello%\"",
}
res = collection.search(**search_param)

تعبيرات السلسلة

بصرف النظر عن المشغل المضاف حديثًا like ، يمكن أيضًا استخدام المشغلات الأخرى، المدعومة بالفعل في الإصدارات السابقة من ميلفوس، لتصفية حقول السلاسل. فيما يلي بعض الأمثلة على تعبيرات السلاسل شائعة الاستخدام، حيث يمثل A حقلاً من النوع VARCHAR. تذكر أن جميع تعبيرات السلسلة أدناه يمكن دمجها منطقيًا باستخدام عوامل منطقية، مثل AND و OR و NOT.

عمليات التعيين

يمكنك استخدام in و not in لتحقيق عمليات المجموعة، مثل A in ["str1", "str2"].

المقارنة بين حقلي سلسلة

يمكنك استخدام العوامل العلائقية لمقارنة قيم حقلي سلسلة. تتضمن هذه العوامل العلائقية == ، != ، ، > ، >= ، < ، <=. لمزيد من المعلومات، راجع العوامل العلائقية.

لاحظ أنه يمكن مقارنة حقول السلسلة فقط مع حقول سلسلة أخرى بدلاً من حقول أنواع البيانات الأخرى. على سبيل المثال، لا يمكن مقارنة حقل من النوع VARCHAR مع حقل من النوع المنطقي أو من النوع الصحيح.

مقارنة حقل بقيمة ثابتة

يمكنك استخدام == أو != للتحقق مما إذا كانت قيمة الحقل تساوي قيمة ثابتة.

تصفية الحقول بنطاق واحد

يمكنك استخدام > و >= و و < و <= لتصفية حقول السلسلة ذات النطاق الواحد، مثل A > "str1".

مطابقة البادئة

كما ذكرنا سابقًا، يضيف ميلفوس 2.1 المشغل like لمطابقة البادئة، مثل A like "prefix%".

ما التالي

مع الإصدار الرسمي ل Milvus 2.1، أعددنا سلسلة من المدونات التي تقدم الميزات الجديدة. اقرأ المزيد في سلسلة المدونات هذه:

Like the article? Spread the word

استمر في القراءة