ডেটা কানেক্টের মাধ্যমে পূর্ণ-পাঠ্য অনুসন্ধান করুন

Firebase Data Connect পূর্ণ-পাঠ্য অনুসন্ধান সমর্থন করে, PostgreSQL দ্বারা চালিত। পূর্ণ-পাঠ্য অনুসন্ধান আপনাকে একবারে একাধিক কলাম জুড়ে কীওয়ার্ড এবং বাক্যাংশ অনুসন্ধান করে বড় ডেটাসেটের মধ্যে দ্রুত এবং দক্ষতার সাথে তথ্য সনাক্ত করতে দেয়।

আপনি আপনার পরিষেবাতে পূর্ণ-পাঠ্য অনুসন্ধান যোগ করতে পারেন। প্রথমে আপনার স্কিমার String @searchable নির্দেশিকা যোগ করুন যা আপনি অনুসন্ধান করতে চান। যেমন:

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 জেনারেট করা SQL-এ DISTINCT অপারেটর যোগ করে।

ভাষা পছন্দ

ডিফল্টরূপে, পূর্ণ-পাঠ্য অনুসন্ধান ইংরেজিতে নথি পার্স করে। আপনি @searchable নির্দেশে ভাষা যুক্তি দিয়ে এটি পরিবর্তন করতে পারেন:

type Movie
  @table {
  title: String! @searchable(language: "french")
  ...
}

সঠিক ভাষা নির্দিষ্ট করা হলে PostgreSQL সঠিক আভিধানিক স্টেমিং সঞ্চালন করতে দেয় এবং আপনার অনুসন্ধান যাতে প্রাসঙ্গিক ফলাফল মিস না করে তা নিশ্চিত করতে সাহায্য করে। আপনি যদি একাধিক কলামে অনুসন্ধান করছেন, তবে সেগুলিকে অবশ্যই একই ভাষায় সেট করতে হবে।

ভাষা
  • সহজ
  • আরবি
  • আর্মেনিয়ন
  • বাস্ক
  • ক্যাটাল
  • ডেনিশ
  • ডাচ
  • ইংরেজি
  • ফিনিশ
  • ফরাসি
  • জার্মান
  • গ্রীক
  • হিন্দি
  • হাঙ্গেরিয়ান
  • ইন্দোনেশিয়ান
  • আইরিশ
  • ইতালিয়ান
  • লিথুয়ান
  • নেপালি
  • নরওয়েজিয়ান

psql ব্যবহার করে, আপনি নিম্নলিখিত প্রশ্নের সাথে সম্পূর্ণ তালিকা পেতে পারেন।

SELECT cfgname FROM pg_ts_config;

প্রশ্ন বিন্যাস

ডিফল্টরূপে, পূর্ণ-পাঠ্য অনুসন্ধান অনুসন্ধানের জন্য (Google অনুসন্ধানের অনুরূপ) ওয়েব শব্দার্থবিদ্যা ব্যবহার করে। আপনি <pluralType>_search ক্ষেত্রে queryFormat আর্গুমেন্ট দিয়ে এই আচরণ পরিবর্তন করতে পারেন।

query SearchMovies($query: String) @auth(level: PUBLIC) {
  movies_search(query: $query, queryFormat: PHRASE) {
    ...
  }
}

ক্যোয়ারী বিন্যাসের জন্য চারটি বিকল্প রয়েছে:

  • QUERY ওয়েব সার্চ ইঞ্জিনে পরিচিত শব্দার্থ দেয় (যেমন উদ্ধৃত স্ট্রিং, AND এবং OR)। এটা ডিফল্ট.
  • PLAIN সমস্ত শব্দের সাথে মেলে, কিন্তু অগত্যা একসাথে নয় ("বাদামী কুকুর" মিলবে "বাদামী এবং সাদা কুকুর" বা "সাদা এবং বাদামী কুকুর")।
  • PHRASE একটি সঠিক বাক্যাংশের সাথে মেলে ( "বাদামী কুকুর" "সাদা এবং বাদামী কুকুর" এর সাথে মিলবে, কিন্তু "বাদামী এবং সাদা কুকুর" এর সাথে মিলবে না)।
  • অ্যাডভান্সড আপনাকে 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 ফিল্টার ব্যবহার করে একটি টেবিলের একাধিক কলামে সঞ্চালিত হতে পারে
বড় নথির উপর পারফরম্যান্স বড় নথির উপর পারফরম্যান্স বড় নথি অনুসন্ধান করার সময় কম কর্মক্ষম
প্রতিটি অনুসন্ধানের জন্য একটি উত্পন্ন কলাম এবং একটি সূচক সংরক্ষণ করতে মেমরি এবং স্টোরেজ ওভারহেড যোগ করে