عوامل التصفية في استعلامات المتجهات

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

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

تصف هذه المقالة كل وضع تصفية وتوفر إرشادات حول وقت استخدام كل وضع.

وضع التصفية المسبقة

يطبق التصفية المسبقة عوامل التصفية قبل تنفيذ الاستعلام، ما يقلل من مساحة سطح البحث التي تبحث خوارزمية البحث المتجه عنها عن محتوى مشابه. في استعلام متجه، preFilter هو الافتراضي.

Diagram of prefilters.

وضع التصفية اللاحقة

تطبق التصفية اللاحقة عوامل التصفية بعد تنفيذ الاستعلام، مما يؤدي إلى تضييق نطاق نتائج البحث.

Diagram of post-filters.

اختبار معياري لأوضاع عامل تصفية المتجهات

لفهم الشروط التي يعمل بموجبها وضع عامل تصفية أفضل من الآخر، قمنا بإجراء سلسلة من الاختبارات لتقييم نتائج الاستعلام عبر فهارس صغيرة ومتوسطة وكبيرة.

  • صغير (100000 مستند، فهرس 2.5 غيغابايت، 1536 بعدا)
  • متوسط (1 مليون مستند، فهرس 25 غيغابايت، 1536 بعدا)
  • كبير (1 مليار وثيقة، مؤشر 1.9 ТБ، 96 بعدا)

بالنسبة لأحمال العمل الصغيرة والمتوسطة، استخدمنا خدمة Standard 2 (S2) مع قسم واحد ونسخة متماثلة واحدة. بالنسبة لحمل العمل الكبير، استخدمنا خدمة Standard 3 (S3) مع 12 قسما ونسخة متماثلة واحدة.

الفهارس لها بناء متطابق: حقل مفتاح واحد، وحقل متجه واحد، وحقل نصي واحد، وحقل واحد قابل للتصفية الرقمية. يتم تعريف الفهرس التالي باستخدام بناء الجملة 2023-07-01-preview.

def get_index_schema(self, index_name, dimensions):
    return {
        "name": index_name,
        "fields": [
            {"name": "id", "type": "Edm.String", "key": True, "searchable": True},
            {"name": "content_vector", "type": "Collection(Edm.Single)", "dimensions": dimensions,
              "searchable": True, "retrievable": True, "filterable": False, "facetable": False, "sortable": False,
              "vectorSearchConfiguration": "defaulthnsw"},
            {"name": "text", "type": "Edm.String", "searchable": True, "filterable": False, "retrievable": True,
              "sortable": False, "facetable": False},
            {"name": "score", "type": "Edm.Double", "searchable": False, "filterable": True,
              "retrievable": True, "sortable": True, "facetable": True}
        ],
        "vectorSearch":
        {
            "algorithmConfigurations": [
                {"name": "defaulthnsw", "kind": "hnsw", "hnswParameters": {"metric": "euclidean"}}
            ]
        }
    }

في الاستعلامات، استخدمنا عامل تصفية متطابق لكل من عمليات التصفية المسبقة والتصفية اللاحقة. استخدمنا عامل تصفية بسيطا للتأكد من أن التباينات في الأداء كانت بسبب وضع التصفية، وليس تعقيد التصفية.

تم قياس النتائج في الاستعلامات في الثانية (QPS).

النقاط الرئيسية

  • يكون التصفية المسبقة دائما أبطأ من التصفية اللاحقة، باستثناء الفهارس الصغيرة حيث يكون الأداء متساويا تقريبا.

  • في مجموعات البيانات الأكبر، التصفية المسبقة هي أوامر بحجم أبطأ.

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

  • التصفية اللاحقة مخصصة للعملاء الذين:

    • سرعة القيمة عند التحديد (يمكن أن ترجع عملية التصفية اللاحقة أقل من k النتائج)
    • استخدام عوامل التصفية غير الانتقائية بشكل مفرط
    • لديك فهارس بحجم كاف بحيث يكون أداء التصفية المسبقة غير مقبول

التفاصيل

  • نظرا لمجموعة بيانات بها 100000 متجه في 1536 بعدا:

    • عند تصفية أكثر من 30٪ من مجموعة البيانات، كانت التصفية المسبقة والتصفية اللاحقة قابلة للمقارنة.
    • عند تصفية أقل من 0.1٪ من مجموعة البيانات، كان التصفية المسبقة أبطأ بنسبة 50٪ تقريبا من التصفية اللاحقة.
  • نظرا لمجموعة بيانات بها مليون متجه في 1536 بعدا:

    • عند تصفية أكثر من 30٪ من مجموعة البيانات، كان التصفية المسبقة أبطأ بنسبة 30٪ تقريبا.
    • عند تصفية أقل من 2٪ من مجموعة البيانات، كان التصفية المسبقة أبطأ سبع مرات تقريبا.
  • نظرا لمجموعة بيانات بها مليار متجه في 96 بعدا:

    • عند تصفية أكثر من 5٪ من مجموعة البيانات، كان التصفية المسبقة أبطأ بنسبة 50٪ تقريبا.
    • عند تصفية أقل من 10٪ من مجموعة البيانات، كان التصفية المسبقة أبطأ سبع مرات تقريبا.

يظهر الرسم البياني التالي QPS النسبي للتصفية المسبقة، المحسوبة ك QPS للتصفية المسبقة مقسومة على QPS لملف ما بعد التصفية.

Chart showing QPS performance for small, medium, and large indexes for relative QPS.

المحور العمودي هو QPS للتصفية المسبقة عبر QPS للتصفية اللاحقة. على سبيل المثال، تعني القيمة 0.0 أن التصفية المسبقة أبطأ بنسبة 100٪، و0.5 على المحور العمودي تعني أن التصفية المسبقة أبطأ بنسبة 50٪، و1.0 تعني التصفية المسبقة والتصفية اللاحقة مكافئة.

يمثل المحور الأفقي معدل التصفية أو النسبة المئوية للمستندات المرشحة بعد تطبيق عامل التصفية. على سبيل المثال، 1.00% يعني أنه تم تحديد واحد بالمائة من مجموعة البحث بواسطة معايير التصفية.