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 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" से किया जाएगा).
- वाक्यांश, किसी वाक्यांश से पूरी तरह मेल खाता है. उदाहरण के लिए, "ब्राउन डॉग" क्वेरी के लिए "द व्हाइट ऐंड ब्राउन डॉग" नतीजे के तौर पर दिखेगा, लेकिन "ब्राउन ऐंड व्हाइट डॉग" नहीं दिखेगा.
- 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 फ़िल्टर का इस्तेमाल करके, टेबल के एक से ज़्यादा कॉलम पर लागू किया जा सकता है |
| बड़े दस्तावेज़ों पर बेहतर परफ़ॉर्मेंस | बड़े दस्तावेज़ों पर बेहतर परफ़ॉर्मेंस | बड़े दस्तावेज़ों में खोज करने पर, यह कम असरदार होता है |
| यह जनरेट किए गए कॉलम और हर खोज के लिए इंडेक्स को सेव करने के लिए, मेमोरी और स्टोरेज ओवरहेड जोड़ता है |