جستجوی تمام متن را با Data Connect انجام دهید

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 روی چندین ستون در یک جدول انجام داد
قابل اجرا بر روی اسناد بزرگتر اجرا بر روی اسناد بزرگ هنگام جستجوی اسناد بزرگتر عملکرد کمتری دارد
سربار حافظه و ذخیره سازی را برای ذخیره یک ستون تولید شده و یک فهرست برای هر جستجو اضافه می کند