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