از ویژگیهای جستجوی متن در Cloud Firestore برای جستجوی رشتههای خاص در اسناد استفاده کنید.
الزامات نسخه
جستجوی متن به پایگاه داده نسخه Firestore Enterprise نیاز دارد.
قبل از اینکه شروع کنی
برای انجام جستجوی متنی، ابتدا باید برای فیلدهایی که نیاز به جستجو در آنها دارید ، فهرستهای متنی ایجاد کنید .
اجرای جستجوی متنی
برای انجام جستجوی متنی، از عبارت documentMatches در پارامتر query مرحله search(...) استفاده کنید.
این عملیات فقط در فیلدهایی که با یک فهرست متنی فهرست شدهاند جستجو میکند. اگر چندین فهرست موجود باشد، Cloud Firestore یک فهرست را برای استفاده در عملیات انتخاب میکند.
Web
const result = await execute(db.pipeline().collection('restaurants') .search({ query: documentMatches('waffles') }));
آیاواس
let snapshot = try await db.pipeline().collection("restaurants") .search(query: DocumentMatches("waffles")) .execute()
Kotlin
val pipeline = db.pipeline().collection("restaurants") .search(SearchStage.withQuery(documentMatches("waffles")))
Java
Pipeline pipeline = db.pipeline().collection("restaurants") .search(SearchStage.withQuery(documentMatches("waffles")));
نود جی اس
await db.pipeline().collection('restaurants') .search({ query: documentMatches('waffles') }) .execute();
پایتون
from google.cloud.firestore_v1.pipeline_expressions import DocumentMatches results = ( client.pipeline() .collection("restaurants") .search(DocumentMatches("waffles")) .execute() )
جاوا
Pipeline.Snapshot results1 = firestore.pipeline().collection("restaurants") .search(Search.withQuery(documentMatches("waffles"))) .execute().get();
برو
snapshot := client.Pipeline(). Collection("restaurants"). Search(firestore.WithSearchQuery(firestore.DocumentMatches("waffles"))). Execute(ctx)
جستجوی یک عبارت دقیق
برای جستجوی دقیق یک عبارت، آن عبارت را داخل علامت نقل قول ( " ) قرار دهید:
Web
const result = await execute(db.pipeline().collection('restaurants') .search({ query: documentMatches('"belgian waffles"') }));
آیاواس
let snapshot = try await db.pipeline().collection("restaurants") .search(query: DocumentMatches("\"belgian waffles\"")) .execute()
Kotlin
val pipeline = db.pipeline().collection("restaurants") .search(SearchStage.withQuery(documentMatches("\"belgian waffles\"")))
Java
Pipeline pipeline = db.pipeline().collection("restaurants") .search(SearchStage.withQuery(documentMatches("\"belgian waffles\"")));
نود جی اس
await db.pipeline().collection('restaurants') .search({ query: documentMatches('"belgian waffles"') }) .execute();
پایتون
from google.cloud.firestore_v1.pipeline_expressions import DocumentMatches results = ( client.pipeline() .collection("restaurants") .search(DocumentMatches('"belgian waffles"')) .execute() )
جاوا
Pipeline.Snapshot results2 = firestore.pipeline().collection("restaurants") .search(Search.withQuery(documentMatches("\"belgian waffles\""))) .execute().get();
برو
snapshot := client.Pipeline(). Collection("restaurants"). Search(firestore.WithSearchQuery(firestore.DocumentMatches("\"belgian waffles\""))). Execute(ctx)
جستجوی ترکیب اصطلاحات
برای جستجوی ترکیب برای عبارات ( AND منطقی)، عبارات را با فاصله از هم جدا کنید:
Web
const result = await execute(db.pipeline().collection('restaurants') .search({ query: documentMatches('waffles eggs') }));
آیاواس
let snapshot = try await db.pipeline().collection("restaurants") .search(query: DocumentMatches("waffles eggs")) .execute()
Kotlin
val pipeline = db.pipeline().collection("restaurants") .search(SearchStage.withQuery(documentMatches("waffles eggs")))
Java
Pipeline pipeline = db.pipeline().collection("restaurants") .search(SearchStage.withQuery(documentMatches("waffles eggs")));
نود جی اس
await db.pipeline().collection('restaurants') .search({ query: documentMatches('waffles eggs') }) .execute();
پایتون
from google.cloud.firestore_v1.pipeline_expressions import DocumentMatches results = ( client.pipeline() .collection("restaurants") .search(DocumentMatches("waffles eggs")) .execute() )
جاوا
firestore.collection("restaurants").add(new HashMap<String, Object>() {{ put("name", "Morning Diner"); put("description", "Start your day with waffles and eggs."); }}); Pipeline.Snapshot results3 = firestore.pipeline().collection("restaurants") .search(Search.withQuery(documentMatches("waffles eggs"))) .execute().get();
برو
snapshot := client.Pipeline(). Collection("restaurants"). Search(firestore.WithSearchQuery(firestore.DocumentMatches("waffles eggs"))). Execute(ctx)
یک اصطلاح را حذف کنید
برای حذف یک اصطلاح، قبل از آن عبارت، یک خط تیره ( - ) قرار دهید:
Web
const result = await execute(db.pipeline().collection('restaurants') .search({ query: documentMatches('coffee -waffles') }));
آیاواس
let snapshot = try await db.pipeline().collection("restaurants") .search(query: DocumentMatches("coffee -waffles")) .execute()
Kotlin
val pipeline = db.pipeline().collection("restaurants") .search(SearchStage.withQuery(documentMatches("waffles eggs")))
Java
Pipeline pipeline = db.pipeline().collection("restaurants") .search(SearchStage.withQuery(documentMatches("coffee -waffles")));
نود جی اس
await db.pipeline().collection('restaurants') .search({ query: documentMatches('-waffles') }) .execute();
پایتون
from google.cloud.firestore_v1.pipeline_expressions import DocumentMatches results = ( client.pipeline() .collection("restaurants") .search(DocumentMatches("-waffles")) .execute() )
جاوا
firestore.collection("restaurants").add(new HashMap<String, Object>() {{ put("name", "City Coffee"); put("description", "Premium coffee and pastries."); }}); Pipeline.Snapshot results4 = firestore.pipeline().collection("restaurants") .search(Search.withQuery(documentMatches("-waffles"))) .execute().get();
برو
snapshot := client.Pipeline(). Collection("restaurants"). Search(firestore.WithSearchQuery(firestore.DocumentMatches("-waffles"))). Execute(ctx)
شما همچنین میتوانید عبارتی مانند pizza -"New York" را حذف کنید.
مرتبسازی نتایج
به طور پیشفرض، Cloud Firestore نتایج را بر اساس زمان ایجاد سند، از جدیدترین به قدیمیترین، مرتب میکند . میتوانید به جای آن، بر اساس امتیاز جستجو مرتب کنید، اما این کار به محاسبات بیشتری برای محاسبه و مقایسه امتیاز دقیق هر سند نیاز دارد:
برای مرتب سازی نتایج بر اساس امتیاز جستجو:
Web
const result = await execute(db.pipeline().collection('restaurants') .search({ query: documentMatches('waffles'), sort: score().descending() }));
آیاواس
let snapshot = try await db.pipeline().collection("restaurants")
.search(
query: DocumentMatches("waffles"),
sort: [Score().descending()]
)
.execute()Kotlin
val pipeline = db.pipeline().collection("restaurants") .search(SearchStage .withQuery(documentMatches("waffles")) .withSort(score().descending()) )
نود جی اس
await db.pipeline().collection('restaurants') .search({ query: documentMatches('waffles'), sort: score().descending() }) .execute();
فیلدهایی را به اسناد برگردانده شده توسط مرحله جستجو اضافه کنید
شما میتوانید addFields برای اضافه کردن فیلدها به اسناد برگردانده شده توسط مرحله جستجو استفاده کنید. عباراتی که مقادیر محاسبه شده توسط مرحله جستجو را برمیگردانند، مانند score() ، میتوانند در addFields در مرحله جستجو برای نوشتن آن مقادیر در اسناد خروجی استفاده شوند.
مثال زیر فیلد امتیاز را به اسناد برگردانده شده توسط مرحله جستجو اضافه میکند:
Web
const result = await execute(db.pipeline().collection('restaurants') .search({ query: 'menu:waffles', addFields: [ score().as('score'), ] }));
آیاواس
let snapshot = try await db.pipeline().collection("restaurants") .search( query: DocumentMatches("waffles"), addFields: [ Score().as("score") ] ) .execute()
Kotlin
val pipeline = db.pipeline().collection("restaurants") .search(SearchStage.withQuery(documentMatches("waffles eggs")))
Java
Pipeline pipeline = db.pipeline().collection("restaurants") .search( SearchStage.withQuery(documentMatches("menu:waffles")) .withAddFields(score().alias("score")));
نود جی اس
await db.pipeline().collection('restaurants') .search({ query: field('menu').matches('waffles'), addFields: [ score().as('score'), ] }).execute();
پایتون
from google.cloud.firestore_v1.pipeline_expressions import DocumentMatches, Score from google.cloud.firestore_v1.pipeline_stages import SearchOptions results = ( client.pipeline() .collection("restaurants") .search( SearchOptions( query=DocumentMatches("menu:waffles"), add_fields=[Score().as_("score")], ) ) .execute() )
جاوا
Pipeline.Snapshot results5 = firestore.pipeline().collection("restaurants") .search(Search.withQuery(field("menu").regexMatch("waffles")) .withAddFields(score().as("score"))) .execute().get();
برو
snapshot := client.Pipeline(). Collection("restaurants"). Search( firestore.WithSearchQuery(firestore.FieldOf("menu").RegexMatch("waffles")), firestore.WithSearchAddFields(firestore.Score().As("score")), ). Execute(ctx)