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;
قالب پرس و جو
به طور پیشفرض، جستجوی متن کامل از معانی وب برای جستجوها استفاده میکند (مشابه جستجوی گوگل). میتوانید این رفتار را با آرگومان 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
...
}
}
انتخاب بین جستجوی متن کامل، جستجوی شباهت برداری و فیلترهای الگوی رشتهای
Data Connect روشهای مختلفی برای جستجو در پایگاه داده شما ارائه میدهد.
از این جدول برای انتخاب مناسبترین مورد برای مورد استفاده خود استفاده کنید.
| جستجوی متن کامل | جستجوی شباهت برداری | فیلترهای الگوی رشتهای |
|---|---|---|
| مناسب برای پیادهسازی قابلیت جستجوی عمومی | برای یافتن ردیفهای مشابه از نظر معنایی (مثلاً توصیهها یا «موارد مشابه بیشتر») مناسب است. | مناسب برای تطابق دقیق متن یا جستجوی عبارات منظم |
| ریشهیابی واژگانی را انجام میدهد، که به تطبیق اشکال یا زمانهای مختلف یک کلمه کمک میکند. | به هوش مصنوعی ورتکس نیاز دارد | از کمترین حافظه و فضای دیسک استفاده میکند، زیرا به هیچ ایندکس یا ستون تولید شدهای نیاز ندارد. |
| میتواند روی چندین ستون در یک جدول انجام شود | فقط برای یک ستون در یک زمان کار میکند | میتوان با استفاده از فیلترهای OR، روی چندین ستون در یک جدول انجام داد |
| عملکرد بهتر نسبت به اسناد بزرگتر | عملکرد عالی روی اسناد بزرگ | عملکرد کمتر هنگام جستجوی اسناد بزرگتر |
| سربار حافظه و ذخیرهسازی را برای ذخیره یک ستون تولید شده و یک شاخص برای هر جستجو اضافه میکند. |