إجراء بحث في النص الكامل باستخدام 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
  • إيطالي
  • الليتوانية
  • نيبالي
  • نرويجي

باستخدام 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
الأداء الجيد مع المستندات الأكبر حجمًا الأداء الجيد مع المستندات الكبيرة أداء أقل عند البحث في مستندات أكبر
تتم إضافة حمل زائد على الذاكرة ومساحة التخزين لتخزين عمود تم إنشاؤه وفهرس لكل عملية بحث