إجراء بحث في النص الكامل باستخدام SQL Connect

Firebase SQL Connect تتيح البحث في النص الكامل، وهي تستند إلى PostgreSQL. تسمح لك ميزة البحث في النص الكامل بتحديد موقع المعلومات بسرعة وكفاءة ضِمن مجموعات البيانات الكبيرة من خلال البحث عن الكلمات الرئيسية والعبارات في عدّة أعمدة في آنٍ واحد.

يمكنك إضافة ميزة البحث في النص الكامل إلى خدمتك. أولاً، أضِف توجيه @searchable إلى String في المخطط الذي تريد البحث فيه. مثلاً:

type Movie
  @table {

  # The fields you want to search over
  title: String! @searchable
  genre: String @searchable
  description: String @searchable
  tags: [String]

  # Some other fields that we won't search over
  rating: Float
  imageUrl: String!
  releaseYear: Int
}

بعد إضافة هذا التوجيه، يمكنك إجراء بحث في النص الكامل من خلال إضافة حقل <pluralType>_search إلى طلب بحث. في هذه الحالة، سيكون movies_search:

query SearchMovies($query: String) @auth(level: PUBLIC) {
  movies_search(query: $query) {
    id
    title
    imageUrl
    releaseYear
    genre
    rating
    tags
    description
  }
}

تحسين نتائج البحث في النص الكامل

يمكنك تحسين نتائج البحث في النص الكامل من خلال إضافة وسيطات إلى توجيه @searchable وحقل _search؛

الوسيطات المشترَكة

يمكنك التحكّم في نتائج البحث باستخدام العديد من الوسيطات نفسها المستخدَمة في حقول القوائم الأساسية <pluralType>:

  • تتيح لك order تغيير ترتيب النتائج. إذا تم حذفها، سيتم ترتيب النتائج حسب مدى الصلة بموضوع البحث تنازليًا.
  • where تتيح لك إضافة فلاتر إضافية إلى البحث (مثل البحث عن أفلام من نوع معيّن فقط).
  • تجعل limit طلب البحث يعرض أعلى X من النتائج فقط.
  • تجعل offset طلب البحث يتخطّى أول X من النتائج.
  • تضيف distinct عامل التشغيل DISTINCT إلى لغة SQL التي تم إنشاؤها.

اختيار اللغة

تلقائيًا، يحلّل البحث في النص الكامل المستندات باللغة الإنجليزية. يمكنك تغيير ذلك باستخدام وسيطة اللغة في توجيه @searchable:

type Movie
  @table {
  title: String! @searchable(language: "french")
  ...
}

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

اللغات
  • بسيط
  • arabic
  • armenian
  • basque
  • catalan
  • danish
  • dutch
  • english
  • estonian
  • finnish
  • french
  • german
  • greek
  • hindi
  • hungarian
  • indonesian
  • irish
  • italian
  • lithuanian
  • nepali
  • norwegian
  • portuguese
  • romanian
  • russian
  • serbian
  • spanish
  • swedish
  • tamil
  • turkish
  • yiddish

نحن نتيح جميع اللغات التي تتيحها ميزة البحث في النص الكامل في PostgreSQL. باستخدام psql، يمكنك الحصول على القائمة الكاملة من خلال طلب البحث التالي.

SELECT cfgname FROM pg_ts_config;

تنسيق طلب البحث

تلقائيًا، يستخدم البحث في النص الكامل دلالات الويب لطلبات البحث (على غرار "بحث Google"). يمكنك تغيير هذا السلوك باستخدام وسيطة queryFormat في حقل <pluralType>_search.

query SearchMovies($query: String) @auth(level: PUBLIC) {
  movies_search(query: $query, queryFormat: PHRASE) {
    ...
  }
}

هناك أربعة خيارات لتنسيق طلب البحث:

  • تمنح QUERY دلالات مألوفة لمحركات البحث على الويب (مثل السلاسل بين علامتَي اقتباس وAND وOR). وهي الإعداد التلقائي.
  • تطابق PLAIN جميع الكلمات، ولكن ليس بالضرورة معًا ("brown dog" ستتطابق مع " the brown and white dog" أو "the white and brown dog").
  • تطابق PHRASE عبارة معيّنة تمامًا ("brown dog" ستتطابق مع "the white and brown dog"، ولكن لن تتطابق مع "brown and white dog").
  • ADVANCED تتيح لك إنشاء طلبات بحث معقّدة باستخدام المجموعة الكاملة من عوامل تشغيل tsquery.

الحد الأدنى لمدى الصلة بموضوع البحث

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

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

لتحديد قيمة مناسبة للحد الأدنى لمدى الصلة بموضوع البحث، عليك إجراء بضع عمليات بحث اختبارية والاطّلاع على _metadata.relevance:

query SearchMovies($query: String) @auth(level: PUBLIC) {
  movies_search(query: $query) {
    id
    title
    _metadata {
      relevance
    }
    ...
  }
}

اختَر حدًا أدنى يحذف النتائج التي تعتبرها غير ذات صلة. ولإجراء ذلك، يُرجى اتّباع الخطوات التالية:

query SearchMovies($query: String) @auth(level: PUBLIC) {
  movies_search(query: $query, relevanceThreshold: 0.05) {
    id
    title
    ...
  }
}

الاختيار بين البحث في النص الكامل والبحث عن التشابه في المتّجهات وفلاتر أنماط السلاسل

SQL Connect تقدّم بضع طرق مختلفة للبحث في قاعدة بياناتك.

استخدِم هذا الجدول لمساعدتك في اختيار الطريقة المناسبة لحالة الاستخدام.

البحث في النص الكامل البحث عن التشابه في المتّجهات فلاتر أنماط السلاسل
مناسبة لتنفيذ وظيفة بحث عامة مناسبة للعثور على صفوف متشابهة دلاليًا (مثل، الاقتراحات أو "المزيد من هذا النوع") مناسبة للمطابقات النصية التامة أو عمليات البحث عن التعابير العادية
تجري عملية اشتقاق للكلمات، ما يساعد في مطابقة أشكال أو أزمنة مختلفة للكلمة نفسها تتطلّب Vertex AI تستخدم أقل مساحة من الذاكرة والقرص، لأنّها لا تتطلّب أي فهارس أو أعمدة تم إنشاؤها
يمكن إجراؤها في عدّة أعمدة في جدول لا تعمل إلا في عمود واحد في كل مرة يمكن إجراؤها في عدّة أعمدة في جدول باستخدام فلاتر OR
تكون فعّالة في المستندات الأكبر حجمًا تكون فعّالة في المستندات الكبيرة تكون أقل فعالية عند البحث في المستندات الأكبر حجمًا
تضيف مساحة إضافية في الذاكرة والتخزين لتخزين عمود تم إنشاؤه و فهرس لكل عملية بحث