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

يتيح Firebase Data 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 بتنفيذ عملية اشتقاق دقيقة للكلمات، وسيساعد في ضمان عدم تفويت نتائج ذات صلة في البحث. إذا كنت تبحث في عدة أعمدة، يجب ضبطها جميعًا على اللغة نفسها.

اللغات
  • بسيط
  • العربية
  • أرميني
  • الباسكية
  • الكتالانية
  • الدانمركية
  • هولندي
  • الإنجليزية
  • الفنلندية
  • الفرنسية
  • german
  • اليونانية
  • hindi
  • هنغاري
  • indonesian
  • irish
  • إيطالي
  • الليتوانية
  • نيبالي
  • norwegian

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

SELECT cfgname FROM pg_ts_config;

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

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

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

تتوفّر أربعة خيارات لتنسيق طلب البحث:

  • توفّر QUERY دلالات مألوفة لمحركات البحث على الويب (مثل السلاسل المقتبسة وAND وOR). وهو الخيار التلقائي.
  • تطابق PLAIN جميع الكلمات، ولكن ليس بالضرورة معًا ("كلب بني" ستتم مطابقته مع "الكلب البني والأبيض" أو "الكلب الأبيض والبني").
  • تطابق العبارة عبارة مطابقة تمامًا ( "كلب بني" ستتم مطابقته مع "الكلب الأبيض والبني"، ولكن لن تتم مطابقته مع "كلب بني وأبيض").
  • تتيح لك خيارات البحث المتقدّمة إنشاء استعلامات معقّدة باستخدام المجموعة الكاملة من عوامل تشغيل 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
    ...
  }
}

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

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

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

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