SQL Connect की मदद से, पूरे टेक्स्ट में खोज करना

Firebase SQL 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` फ़ील्ड में आर्ग्युमेंट जोड़कर, पूरे टेक्स्ट में खोज के नतीजों को बेहतर बनाया जा सकता है.@searchable_search

शेयर किए गए आर्ग्युमेंट

खोज के नतीजों को कंट्रोल करने के लिए, बुनियादी लिस्ट फ़ील्ड <pluralType> के लिए इस्तेमाल किए जाने वाले कई आर्ग्युमेंट का इस्तेमाल किया जा सकता है:

  • order की मदद से, नतीजों का क्रम बदला जा सकता है. अगर इसे छोड़ा जाता है, तो नतीजे, काम के होने के हिसाब से घटते क्रम में दिखाए जाएंगे.
  • where की मदद से, खोज में अतिरिक्त फ़िल्टर जोड़े जा सकते हैं. उदाहरण के लिए, सिर्फ़ किसी खास शैली की फ़िल्में खोजना.
  • limit की मदद से, क्वेरी सिर्फ़ शुरुआती X नतीजे दिखाएगी.
  • offset की मदद से, क्वेरी शुरुआती X नतीजों को छोड़ देगी.
  • distinct की मदद से, जनरेट किए गए SQL में DISTINCT ऑपरेटर जोड़ा जाता है.

भाषा चुनना

डिफ़ॉल्ट रूप से, पूरे टेक्स्ट में खोज करने की सुविधा, दस्तावेज़ों को अंग्रेज़ी में पार्स करती है. @searchable डायरेक्टिव पर, भाषा के आर्ग्युमेंट का इस्तेमाल करके इसे बदला जा सकता है:@searchable

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

सही भाषा चुनने से, PostgreSQL सटीक लेक्सिकल स्टेमिंग कर पाएगा. साथ ही, यह पक्का करने में मदद मिलेगी कि आपकी खोज में काम के नतीजे न छूटें. अगर एक से ज़्यादा कॉलम में खोज की जा रही है, तो उन सभी के लिए एक ही भाषा सेट होनी चाहिए.

भाषाएं
  • सरल
  • ऐरेबिक
  • आर्मीनियन
  • बास्क
  • कैटलन
  • डैनिश
  • डच
  • इंग्लिश
  • एस्तोनियाई
  • फ़िनिश
  • फ़्रेंच
  • जर्मन
  • ग्रीक
  • हिन्दी
  • हंगेरियन
  • इंडोनेशियन
  • आयरिश
  • इटैलियन
  • लिथुएनियन
  • नेपाली
  • नॉर्वीजन
  • पॉर्चुगीज़
  • रोमानियाई
  • रशियन
  • सर्बियाई
  • स्पैनिश
  • स्वीडिश
  • तमिल
  • टर्किश
  • यिद्दि‍‍श

हम उन सभी भाषाओं के लिए सहायता उपलब्ध कराते हैं जिनमें PostgreSQL में पूरे टेक्स्ट में खोज करने की सुविधा उपलब्ध है. psql का इस्तेमाल करके, यहां दी गई क्वेरी से पूरी सूची पाई जा सकती है.

SELECT cfgname FROM pg_ts_config;

क्वेरी का फ़ॉर्मैट

डिफ़ॉल्ट रूप से, पूरे टेक्स्ट में खोज करने की सुविधा, क्वेरी के लिए वेब सिमैंटिक्स का इस्तेमाल करती है. यह Google Search की तरह ही काम करती है. <pluralType>_search फ़ील्ड पर, queryFormat आर्ग्युमेंट का इस्तेमाल करके इस व्यवहार को बदला जा सकता है.

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 ऑपरेटर के पूरे सेट का इस्तेमाल करके, जटिल क्वेरी बनाई जा सकती हैं.

काम के होने का थ्रेशोल्ड

काम के होने का थ्रेशोल्ड सेट करने का मतलब है कि आपकी खोज में सिर्फ़ वे नतीजे दिखेंगे जिनकी वैल्यू, काम के होने के थ्रेशोल्ड से ज़्यादा होगी. ज़्यादातर मामलों में, आपको यह थ्रेशोल्ड सेट करने की ज़रूरत नहीं होगी. ऐसा कोई भी नतीजा जो काम के होने के थ्रेशोल्ड से ज़्यादा होगा, वह काम का नतीजा माना जाएगा.

हालांकि, अगर आपको लगता है कि आपकी खोज में ऐसे नतीजे दिख रहे हैं जो काम के नहीं हैं, तो काम के होने का थ्रेशोल्ड सेट करके उन्हें फ़िल्टर किया जा सकता है.

काम के होने के थ्रेशोल्ड के लिए सही वैल्यू पता करने के लिए, आपको कुछ टेस्ट खोजें करनी चाहिए. साथ ही, _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
    ...
  }
}

पूरे टेक्स्ट में खोज करने की सुविधा, वेक्टर सिमिलैरिटी सर्च, और स्ट्रिंग पैटर्न फ़िल्टर में से किसी एक को चुनना

SQL Connect आपके डेटाबेस में खोज करने के कुछ अलग-अलग तरीके उपलब्ध कराता है.

अपनी ज़रूरत के हिसाब से सही तरीका चुनने के लिए, इस टेबल का इस्तेमाल करें.

पूरे टेक्स्ट में खोज करने की सुविधा वेक्टर सिमिलैरिटी सर्च स्ट्रिंग पैटर्न फ़िल्टर
सामान्य खोज की सुविधा लागू करने के लिए बेहतर सिमैंटिक तौर पर मिलती-जुलती लाइनें ढूंढने के लिए बेहतर. उदाहरण के लिए, सुझाव या 'इसी तरह के अन्य नतीजे' सटीक टेक्स्ट मैच या रेगुलर एक्सप्रेशन खोज के लिए बेहतर
लेक्सिकल स्टेमिंग करता है. इससे एक ही शब्द के अलग-अलग फ़ॉर्म या टेंस का मिलान करने में मदद मिलती है इसके लिए Vertex AI की ज़रूरत होती है यह कम मेमोरी और डिस्क स्पेस का इस्तेमाल करता है, क्योंकि इसके लिए किसी इंडेक्स या जनरेट किए गए कॉलम की ज़रूरत नहीं होती
किसी टेबल में एक से ज़्यादा कॉलम में खोज की जा सकती है एक बार में सिर्फ़ एक कॉलम के लिए काम करता है OR फ़िल्टर का इस्तेमाल करके, किसी टेबल में एक से ज़्यादा कॉलम में खोज की जा सकती है
बड़े दस्तावेज़ों के लिए बेहतर परफ़ॉर्मेंस देता है बड़े दस्तावेज़ों के लिए बेहतर परफ़ॉर्मेंस देता है बड़े दस्तावेज़ों में खोज करने पर, कम परफ़ॉर्मेंस देता है
हर खोज के लिए, जनरेट किए गए कॉलम और इंडेक्स को स्टोर करने के लिए, मेमोरी और स्टोरेज ओवरहेड जोड़ता है