Rust में लिखी गई तेज़ फुल-टेक्स्ट सर्च इंजन लाइब्रेरी
परिचय
- Tantivy एक सर्च इंजन लाइब्रेरी है, जिसका डिज़ाइन Apache Lucene से काफ़ी प्रेरित है.
- Quickwit नाम का एक distributed search engine भी है, जिसे Elasticsearch या Apache Solr के विकल्प के रूप में इस्तेमाल किया जा सकता है.
- Tantivy कोई search engine server नहीं, बल्कि search engine बनाने के लिए एक crate है.
बेंचमार्क
- अलग-अलग query और collection प्रकारों के लिए performance benchmark उपलब्ध हैं.
- query की प्रकृति और load के अनुसार performance बदल सकती है.
मुख्य फीचर्स
- फुल-टेक्स्ट सर्च: कई भाषाओं के लिए tokenizer सपोर्ट.
- तेज़ प्रदर्शन: तेज़ startup time और multithreaded indexing सपोर्ट.
- BM25 scoring: Lucene के समान scoring तरीका.
- नेचुरल लैंग्वेज query: जटिल queries को भी स्वाभाविक रूप से संभाल सकता है.
- range queries और hierarchical facet fields: कई data types का सपोर्ट.
- compressed document store: LZ4, Zstd जैसी कई compression methods का सपोर्ट.
- JSON fields और aggregation collectors: histogram, range buckets, average और statistical metrics का सपोर्ट.
गैर-फीचर्स
- distributed search, Tantivy के दायरे से बाहर है. अगर distributed search चाहिए, तो Quickwit देखें.
शुरू करना
- Tantivy stable Rust पर चलता है और Linux, macOS, Windows को सपोर्ट करता है.
- tantivy-cli: search engine को आसानी से बनाने, indexing और search करने के लिए command-line interface देता है.
- संदर्भ दस्तावेज़: नवीनतम release version के लिए reference documentation उपलब्ध है.
प्रोजेक्ट को सपोर्ट करने के तरीके
- Tantivy का उपयोग करें और अपना अनुभव साझा करें.
- bug report जमा करें.
- blog post लिखें.
- documentation में मदद करें.
- code में योगदान दें.
कोड योगदान
- GitHub Pull Request workflow का उपयोग करें.
- योगदान करते समय GitHub ticket का संदर्भ दें और व्यापक commit message लिखें.
FAQ
- अन्य भाषा समर्थन: Python, Ruby आदि के लिए कई language bindings उपलब्ध हैं.
- उपयोग के उदाहरण: seshat, tantiny, lnx जैसे कई projects में उपयोग.
- गति तुलना: Lucene से लगभग 2 गुना तेज़.
- incremental indexing सपोर्ट: हाँ.
- दस्तावेज़ संपादन: documents immutable हैं. delete करने के बाद reindexing करनी होगी.
- indexing के दौरान search कब संभव है:
commit call के बाद search संभव है.
GN⁺ की राय
- Rust आधारित तेज़ प्रदर्शन: Rust की performance और safety का उपयोग करने वाला तेज़ search engine, performance-critical projects के लिए उपयुक्त.
- कई भाषाओं का समर्थन: Python, Ruby आदि के लिए language bindings के ज़रिए अलग-अलग environments में इस्तेमाल किया जा सकता है.
- incremental indexing: बड़े पैमाने के data processing में उपयोगी फीचर.
- document immutability: data consistency बनाए रखता है, लेकिन document बदलने पर reindexing की ज़रूरत होती है.
- Quickwit के साथ एकीकरण: अगर distributed search चाहिए, तो Quickwit के साथ उपयोग करना अच्छा रहेगा.
1 टिप्पणियां
Hacker News टिप्पणियाँ
प्रोजेक्ट अनुभव साझा: पुराने Python2 AppEngine codebase को बदलने के लिए इस लाइब्रेरी का उपयोग करके <a href="https://progscrape.com" rel="nofollow">progscrape.com</a> को फिर से बनाया गया। लाइब्रेरी बहुत तेज़ है, और Raspberry Pi पर 1M स्टोरीज़ को कुछ ही सेकंड में index किया जा सका। CPU उपयोग बहुत कम था, और search performance भी बेहतरीन थी.
ParadeDB और Tantivy: हाल ही में ParadeDB(Postgres extension) में Tantivy मिला। इसका उपयोग high-performance analytics के लिए Postgres को extend करने में किया जाता है.
Quickwit और Clickhouse: बहुभाषी search project में Quickwit और Clickhouse का संयुक्त performance बहुत अच्छा था। खासकर Chinese, Japanese, और Korean search के लिए यह उपयोगी था.
to_tsvector की सीमाएँ: PostgreSQL का to_tsvector कुछ specific use cases के लिए उपयुक्त नहीं था। Tantivy की सफलता की कामना है.
Quickwit का production deployment: Quickwit का उपयोग करके अरबों objects को index किया गया, और indexing speed तथा query latency प्रतिस्पर्धी रही। compute और storage का अलगाव बहुत उपयोगी था.
Tantivy का performance: Tantivy के performance और संस्थापकों की मेहनत से प्रभावित थे। टीम की सफलता पर भरोसा है.
Etsy/Hound का trigram search: Russ Cox के regular expression matching पर आधारित Go language के trigram search index का उपयोग करने का अनुभव था.
Tantivy चुनने का कारण: Elasticsearch के resource usage से निराश होकर Tantivy चुना गया। Rust में project करना चाहते थे, और Tantivy का performance तथा documentation बेहतरीन था.
Lucene और Solr के upgrade issues: Lucene और Solr में index upgrade support की कमी है। कई बड़े projects में reindexing बहुत महंगी होती है और कभी-कभी असंभव भी.
field जोड़ने/हटाने की सीमा: Tantivy में fields को जोड़ा या हटाया नहीं जा सकता, और सभी data को किसी दूसरे search index में फिर से reindex करना पड़ता है.
Meilisearch का विकल्प: Meilisearch की telemetry समस्या के कारण Tantivy को विकल्प के रूप में देखा गया। इसका setup आसान लगता है.
LanceDb और Tantivy: LanceDb नामक vector database product में full-text search functionality देने के लिए Tantivy का उपयोग किया जाता है। अभी यह केवल Python bindings के माध्यम से संभव है, लेकिन Rust bindings लागू करने की योजना है.