22 पॉइंट द्वारा xguru 2024-08-14 | 3 टिप्पणियां | WhatsApp पर शेयर करें

full-text search

  • full-text search वह तकनीक है जिसमें किसी टेक्स्ट संग्रह में खास keywords और phrases की मौजूदगी के आधार पर आइटम खोजे जाते हैं
  • Elasticsearch जैसे अधिकांश search engines search results को rank करने के लिए BM25 algorithm का उपयोग करते हैं
    • BM25 यह देखता है कि कोई term कितनी बार दिखाई देता है, और सभी documents में वह term कितना unique है
  • full-text search, similarity search या vector search से अलग है, जो semantic meaning के आधार पर results खोजते और rank करते हैं
  • कई आधुनिक applications full-text search और similarity search को मिलाकर उपयोग करती हैं; इसे hybrid search कहा जाता है, और इससे अधिक सटीक results मिल सकते हैं

Postgres FTS

फायदे

  1. सरलता

    • Postgres FTS के लिए अतिरिक्त infrastructure की ज़रूरत नहीं होती और इसे AWS RDS जैसी सभी managed Postgres services पर इस्तेमाल किया जा सकता है
    • लंबी अवधि में external search engine को orchestrate और manage करने की ज़रूरत नहीं पड़ती, जिससे काफ़ी समय और मेहनत बच सकती है
  2. रीयल-टाइम search

    • Postgres FTS में commit होते ही data searchable हो जाता है
    • यह user-facing search experience या latency-sensitive search experience बनाने वाली कंपनियों के लिए बहुत उपयोगी हो सकता है, जैसे e-commerce sites या fintech
  3. Postgres transactions और MVCC

    • Postgres के ACID transactions और multi-version concurrency control (MVCC) concurrent access और frequent updates के दौरान FTS results की reliability सुनिश्चित करते हैं

नुकसान

  1. फीचर की अपूर्णता

    • Postgres FTS का सीमित feature set कुछ कंपनियों के लिए deal-breaker हो सकता है
    • जिन features की कमी है उनमें BM25 scoring, relevance tuning, custom tokenizers, faceting आदि शामिल हैं
  2. बड़े data sets पर performance में गिरावट

    • Postgres FTS लाखों rows वाली tables पर अच्छा काम करता है, लेकिन करोड़ों rows वाली tables पर performance काफ़ी घट जाती है
  3. transaction overhead

    • किसी column पर GIN index बनाने से उस column को प्रभावित करने वाले transactions में थोड़ी latency जुड़ जाती है, आमतौर पर milliseconds में

मुख्य सार

  • Postgres FTS छोटे से मध्यम आकार की tables में search के लिए आदर्श है, जहाँ बहुत sophisticated FTS queries की ज़रूरत नहीं होती
  • "मध्यम आकार" और "sophisticated" का अर्थ जानबूझकर अस्पष्ट रखा गया है, क्योंकि यह performance requirements पर निर्भर करता है
  • अच्छी बात यह है कि Postgres FTS पर/से test और migration करना बहुत आसान है

Elasticsearch

फायदे

  1. व्यापक feature set

    • Elasticsearch लगभग हर तरह की FTS query को संभाल सकता है
    • Elastic query DSL (domain-specific language) full-text search capabilities का मानक है
  2. उच्च performance

    • benchmarks के अनुसार Elasticsearch अपने default, battle-tested Lucene search engine और distributed architecture की वजह से अरबों rows पर milliseconds में query चला सकता है
  3. search से आगे की क्षमताएँ

    • FTS के अलावा Elasticsearch एक analytical query engine, vector database, security और observability platform भी है
    • कई organizations Elasticsearch के भीतर कई services को consolidate करने की सरलता पसंद करती हैं

नुकसान

  1. यह विश्वसनीय data store नहीं है

    • कई कंपनियों ने Elasticsearch को primary data store के रूप में इस्तेमाल करने का फ़ैसला करने पर बाद में पछताया है
    • यह अनुशंसित तरीका नहीं है। Elasticsearch में ACID transactions और MVCC नहीं होते, जिससे data inconsistency और loss हो सकता है, और relational properties व real-time consistency की कमी के कारण कई database queries कठिन हो जाती हैं
  2. ETL pipeline की ज़रूरत

    • क्योंकि Elasticsearch विश्वसनीय data store नहीं है, इसलिए आमतौर पर Postgres इस्तेमाल करने वाली organizations data को Postgres से Elasticsearch में extract, transform, और load (ETL) करती हैं
    • ETL pipeline में failure कई तरह के production outages का कारण बन सकते हैं, इसलिए यह सावधानी से maintain करना पड़ता है कि base Postgres schema में बदलाव pipeline को न तोड़ें
  3. data freshness का नुकसान

    • ETL jobs समय लेने वाली होती हैं और समय-समय पर चलती हैं
    • Elasticsearch तक पहुँचने वाला data अक्सर Postgres की तुलना में कई घंटे पीछे होता है
    • Postgres tables पर real-time search करने वाले applications के लिए यह अस्वीकार्य हो सकता है
  4. लागत

    • यह सुनकर हैरानी होती है कि कई कंपनियों के लिए Elasticsearch सबसे बड़ा software cost item बन गया
    • जैसे-जैसे Elasticsearch cluster की लागत बढ़ी, इनमें से कई कंपनियाँ Elasticsearch Cloud से self-managed setup पर गईं, जिससे cloud खर्च तो घटा लेकिन नई समस्याएँ पैदा हुईं
    • Elasticsearch को operate, tune, और manage करना बेहद कठिन माना जाता है
    • ये organizations Elasticsearch clusters को manage करने के लिए महँगे engineers तक hire करती हैं

मुख्य सार

  • Elasticsearch बेहतरीन search performance देता है, लेकिन इसकी कीमत operational overhead और data freshness के समझौते के रूप में चुकानी पड़ती है
  • यदि हल्के विकल्पों से काम न चले, या आप Elasticsearch की अन्य services भी उपयोग करने वाले हों, तो Elasticsearch की सिफारिश की जाती है

वैकल्पिक search engines

  • पिछले कुछ वर्षों में Algolia, Meilisearch, और Typesense जैसे आधुनिक search engines उभरे हैं
  • इन engines का उपयोग आमतौर पर user-facing search experience बनाने के लिए किया जाता है
  • Hacker News search भी Algolia पर बना है
  • हर service किनारों पर खुद को अलग दिखाती है, लेकिन Postgres पर search खोजने वाले developers के लिए एक महत्वपूर्ण चेतावनी है
  • इनमें से कोई भी solution खास तौर पर Postgres के लिए नहीं बनाया गया है
  • Postgres users को Elasticsearch की तरह इन services में भी समान समस्याएँ झेलनी पड़ सकती हैं

क्या दोनों दुनियाओं का श्रेष्ठ मिल सकता है?

  • ParadeDB, Postgres के लिए बनाया गया एक full-text search engine है
  • pg_search नाम के extension पर आधारित ParadeDB, Rust-आधारित Lucene alternative Tantivy को Postgres के भीतर embed करता है
  • Postgres FTS की तरह ParadeDB भी अतिरिक्त infrastructure के बिना मौजूदा self-managed Postgres database से जुड़ता है
  • Elasticsearch की तरह ParadeDB उन्नत full-text search engine की capabilities प्रदान करता है
  • Amazon RDS जैसी managed Postgres services के साथ compatibility जल्द आने वाली है

3 टिप्पणियां

 
galadbran 2024-08-14

मुझे अब पता चला कि Postgres FTS से मतलब उसकी built-in functionality था।

 
xguru 2024-08-14

ये लोग इसे लगातार बेहतर बना रहे हैं और इससे जुड़े लेख पोस्ट कर रहे हैं, इसलिए इसे GeekNews पर भी कई बार साझा किया गया है.

ParadeDB - PostgreSQL for Search
pg_bm25 - Postgres में Elastic स्तर की गुणवत्ता देने वाला Full-Text search extension

 
cometkim 2024-08-14

लेख में जिन paradedb, pg_search, और pg_bm25 का उल्लेख है, वे सभी एक ही प्रोजेक्ट हैं।