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