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