RediSearch 2.0 अब सार्वजनिक पूर्वावलोकन में है! इस प्रमुख नई रिलीज़ की अधिकांश सुविधाएँ आपके फीडबैक से प्रेरित हैं, जिसमें डेवलपर अनुभव को बेहतर बनाने और स्केलेबिलिटी बढ़ाने पर ध्यान केंद्रित किया गया है। लेकिन यह ब्लॉग पोस्ट RediSearch 2.0 की नई डेटा इंडेक्सिंग क्षमताओं और इंडेक्स बनाने के बेहतर तरीकों का उपयोग करके आपको शुरू करने में मदद करने पर केंद्रित है।
आपके Redis डेटाबेस के अंदर एक समृद्ध क्वेरी और एग्रीगेशन इंजन होने से कैशिंग से परे कई नए एप्लिकेशन के द्वार खुलते हैं। आप Redis को अपने प्राथमिक डेटाबेस के रूप में उपयोग कर सकते हैं, भले ही आपको जटिल क्वेरी का उपयोग करके डेटा तक पहुंचने की आवश्यकता हो, बिना डेटा को अपडेट और इंडेक्स करने के लिए कोड में जटिलता जोड़े। यह सब Redis की प्रसिद्ध गति, विश्वसनीयता, और स्केलेबिलिटी के साथ!
नया क्या है, इसके लिए देखें RediSearch 2.0 का परिचय
शुरू करना
पूर्वापेक्षाएँ
RediSearch 2.0 के साथ शुरू करने के लिए, आपको आवश्यकता होगी:
- Docker
- एक Redis कमांड-लाइन इंटरफेस। आपके दो मुख्य विकल्प हैं:
- redis-cli, Redis के साथ प्रदान किया गया
- RedisInsight, स्ट्रीमलाइन Redis एप्लिकेशन डेवलपमेंट के लिए एक मुफ्त GUI, जिसमें कमांड-लाइन इंटरफेस भी शामिल है।
RediSearch सक्षम Redis डेटाबेस प्राप्त करें
आप विभिन्न तरीकों से RediSearch 2.0 इंस्टॉल और उपयोग कर सकते हैं:
- Redis Enterprise Cloud
- Redis Enterprise Software
- RediSearch बाइनरीज़
- RediSearch स्रोत
- Docker इमेज
सरलता के लिए, यह ब्लॉग पोस्ट Docker इमेज का उपयोग करेगा। (यदि आपने पहले से RedisSearch 2.0 इंस्टॉल कर लिया है, तो आप अगले भाग पर जा सकते हैं।) Docker के साथ अपना Redis इंस्टेंस शुरू करने के लिए, एक टर्मिनल खोलें और निम्न कमांड चलाएं:
> docker run -it --rm --name redis-search-2 \ -p 6379:6379 \ redis/redisearch:2.0.0
नोट: कंटेनर बाहर निकलने पर स्वचालित रूप से हटा दिया जाएगा (–rm पैरामीटर)।
Redis से कनेक्ट करें और डेटा डालें
अपने पसंदीदा Redis क्लाइंट का उपयोग करके, RediSearch डेटाबेस से कनेक्ट करें।
यदि आपने Docker के साथ अपना Redis इंस्टेंस शुरू किया है तो आप कंटेनर में एम्बेडेड redis-cli का उपयोग करने के लिए निम्न कमांड का उपयोग कर सकते हैं:
> docker exec -it redis-search-2 redis-cli
यदि आप Redis Insight का उपयोग करना चाहते हैं, तो अपना RediSearch इंस्टेंस जोड़ें और CLI पर जाएं।
डेटा डालें
अब आप कुछ डेटा डालने के लिए तैयार हैं। यह उदाहरण Redis हैश के रूप में संग्रहीत मूवी डेटा का उपयोग करता है, तो आइए कुछ फिल्में डालें:
> HSET movie:11002 title "Star Wars: Episode V - The Empire Strikes Back" plot "Luke Skywalker begins Jedi training with Yoda." release_year 1980 genre "Action" rating 8.7 votes 1127635 (integer) 6 > HSET movie:11003 title "The Godfather" plot "The aging patriarch of an organized crime dynasty transfers control of his empire to his son." release_year 1972 genre "Drama" rating 9.2 votes 1563839 (integer) 6
डेटाबेस में अब दो हैश हैं। यदि आप मूवी की कुंजी जानते हैं (movie:11002) तो निम्न कमांड का उपयोग करके जानकारी प्राप्त करना सरल है:
> HMGET movie:11002 title rating 1) "Star Wars: Episode V - The Empire Strikes Back" 2) "8.7"
लेकिन आप डेटाबेस को title, genre, या release_year का उपयोग करके फिल्मों की सूची प्राप्त करने के लिए कैसे क्वेरी कर सकते हैं?
"कोर" Redis डेटा संरचनाओं के साथ, आपको सेट का उपयोग करके शैली को मूवी ID की सूची से जोड़कर, उदाहरण के लिए, अपना इंडेक्स स्वयं प्रबंधित करना होगा, और इंडेक्स को प्रबंधित और क्वेरी करने के लिए अपने एप्लिकेशन में बहुत सारा कोड जोड़ना होगा।
लेकिन RediSearch के साथ आप बस अपने डेटा से जुड़े एक इंडेक्स को परिभाषित कर सकते हैं और डेटाबेस को उन्हें प्रबंधित करने दे सकते हैं। फिर आप सेकेंडरी इंडेक्स का उपयोग करके डेटा को क्वेरी/खोज करने के लिए क्वेरी इंजन का उपयोग कर सकते हैं।
फिल्मों के लिए एक RediSearch इंडेक्स बनाएं
एक इंडेक्स बनाने के लिए, आपको एक स्कीमा को परिभाषित करना होगा जो इंडेक्स किए गए फील्ड और उनके प्रकारों को सूचीबद्ध करता है, और जिनका उपयोग आप अपनी क्वेरी में कर सकते हैं।
इस उदाहरण के लिए आप चार फील्ड इंडेक्स करेंगे:
- शीर्षक
- रिलीज़ वर्ष
- रेटिंग
- शैली
इंडेक्स बनाना FT.CREATE कमांड का उपयोग करके किया जाता है:
> FT.CREATE idx:movie ON hash PREFIX 1 "movie:" SCHEMA title TEXT SORTABLE release_year NUMERIC SORTABLE rating NUMERIC SORTABLE genre TAG SORTABLE OK
क्वेरी चलाने से पहले, आइए FT.CREATE कमांड पर करीब से नज़र डालें:
- idx:movie: इंडेक्स का नाम, जिसका उपयोग आप क्वेरी करते समय करेंगे
- ON hash: इंडेक्स की जाने वाली संरचना का प्रकार। (ध्यान दें कि RediSearch 2.0 केवल हैश संरचना का समर्थन करता है, लेकिन यह पैरामीटर भविष्य में RediSearch को अन्य संरचनाओं को इंडेक्स करने की अनुमति देगा।)
- PREFIX 1 “movie:”: उन कुंजियों का प्रीफिक्स जिन्हें इंडेक्स किया जाना चाहिए। यह एक सूची है, इसलिए चूंकि हम केवल movie:* कुंजियों को इंडेक्स करना चाहते हैं, संख्या 1 है। यदि आप समान फील्ड के साथ फिल्मों और टीवी शो को इंडेक्स करना चाहते हैं, तो आप उपयोग कर सकते हैं: PREFIX 2 “movie:” “tv_show:”
- SCHEMA …: स्कीमा, फील्ड, और इंडेक्स करने के लिए उनके प्रकार को परिभाषित करता है। जैसा कि आप कमांड में देख सकते हैं, हम TEXT, NUMERIC, और TAG, और SORTABLE पैरामीटर का उपयोग कर रहे हैं।
RediSearch 2.0 इंजन PREFIX मानों का उपयोग करके डेटाबेस को स्कैन करेगा, और स्कीमा परिभाषा के आधार पर इंडेक्स को अपडेट करेगा। यह मौजूदा एप्लिकेशन में इंडेक्स जोड़ना आसान बनाता है जो हैश का उपयोग करता है, आपके कोड को बदलने की कोई आवश्यकता नहीं है।
आप निम्न कमांड के साथ इंडेक्स जानकारी देख सकते हैं:
> FT.INFO idx:movie 1) index_name 2) idx:movie ... 46) 1) global_idle 2) (integer) 0 ...
अब हम इंडेक्स का उपयोग करने और डेटाबेस को क्वेरी करने के लिए तैयार हैं।
मूवी डेटाबेस को क्वेरी करें
इस खंड के लिए आप FT.SEARCH कमांड और इसके सिंटैक्स का उपयोग करेंगे; ध्यान दें कि इस ब्लॉग पोस्ट का लक्ष्य आपको शुरू करना है, इसलिए हम मूल बातों पर टिके रहेंगे और सभी विवरणों में नहीं जाएंगे। RediSearch के बारे में अधिक जानने के लिए, दस्तावेज़ीकरण और ट्यूटोरियल देखें।
फुल-टेक्स्ट खोज क्वेरी
RediSearch एक फुल-टेक्स्ट खोज इंजन है, जो एप्लिकेशन को Google शैली में शक्तिशाली क्वेरी चलाने की अनुमति देता है। उदाहरण के लिए, "युद्ध"-संबंधी जानकारी वाली सभी फिल्मों को खोजने के लिए, आप निम्न कमांड चलाएंगे:
> FT.SEARCH idx:movie "war" RETURN 3 title release_year rating 1) (integer) 1 2) "movie:11002" 3) 1) "title" 2) "Star Wars: Episode V - The Empire Strikes Back" 3) "release_year" 4) "1980" 5) "rating" 6) "8.7"
जैसा कि आप देख सकते हैं, मूवी Star Wars: Episode V—The Empire Strikes Back मिल गई है, भले ही आपने शीर्षक में "Wars" से मेल खाने के लिए केवल शब्द "war" का उपयोग किया हो। ऐसा इसलिए है क्योंकि शीर्षक को टेक्स्ट के रूप में इंडेक्स किया गया है, इसलिए फील्ड को टोकनाइज़ और स्टेम किया गया है।
साथ ही, कमांड एक फील्ड निर्दिष्ट नहीं करता है, इसलिए शब्द "war" (और संबंधित शब्द) इंडेक्स के सभी टेक्स्ट फील्ड में खोजा जाता है। यदि आप विशिष्ट फील्ड में खोजना चाहते हैं, तो आप @field नोटेशन का उपयोग करेंगे, जैसा कि यहां दिखाया गया है:
> FT.SEARCH idx:movie "@title:war" RETURN 3 title release_year rating
आप इस सरल डेटासेट के खिलाफ अतिरिक्त फुल-टेक्स्ट खोज क्वेरी चला सकते हैं, जैसा कि यहां प्रदर्शित किया गया है (नोट: दस्तावेज़ को छोटा रखने के लिए, क्वेरी के परिणाम नहीं दिखाए गए हैं):
प्रीफिक्स मैच:
> FT.SEARCH idx:movie "emp*" RETURN 3 title release_year rating
फज़ी खोज:
> FT.SEARCH idx:movie "%gdfather%" RETURN 3 title release_year rating
यूनियन:
> FT.SEARCH idx:movie "war | %gdfather% " RETURN 3 title release_year rating
क्वेरी सिंटैक्स के बारे में अधिक जानकारी RediSearch दस्तावेज़ीकरण में पाई जा सकती है।
टैग फील्ड खोज
सभी "ड्रामा" फिल्मों को खोजने के लिए टैग फील्ड "genre" का उपयोग करें:
> FT.SEARCH idx:movie "@genre:{Drama}" RETURN 3 title release_year rating 1) (integer) 1 2) "movie:11003" 3) 1) "title" 2) "The Godfather" 3) "release_year" 4) "1972" 5) "rating" 6) "9.2"
सिंटैक्स @field:{value} इंगित करता है कि आप एक टैग फील्ड में खोज रहे हैं। टैग फिल्टर के बारे में अधिक जानकारी RediSearch दस्तावेज़ीकरण में पाई जा सकती है।
डेटाबेस अपडेट करें और क्वेरी करें
अब तक, आप जो भी डेटा क्वेरी कर रहे हैं वह इंडेक्स से पहले बनाया गया था और इंडेक्स निर्माण के दौरान इंडेक्स किया गया था। आइए एक नई मूवी जोड़कर चीजों को बदलते हैं:
> HSET "movie:11005" title "Star Wars: Episode VI - Return of the Jedi" plot "The Rebels destroy the Empire's Death Star." release_year 1983 genre "Action" rating 8.3 votes 906260 (integer) 6
आप पहले की क्वेरी का पुनः उपयोग कर सकते हैं:
> FT.SEARCH idx:movie "war" RETURN 3 title release_year rating 1) (integer) 2 2) "movie:11005" 3) 1) "title" 2) "Star Wars: Episode VI - Return of the Jedi" 3) "release_year" 4) "1983" 5) "rating" 6) "8.3" 4) "movie:11002" 5) 1) "title" 2) "Star Wars: Episode V - The Empire Strikes Back" 3) "release_year" 4) "1980" 5) "rating" 6) "8.7"
जैसा कि आप देख सकते हैं, नई मूवी स्वचालित रूप से इंडेक्स हो गई है।
इसी तरह, यदि आप किसी मूवी को हटाते हैं या समाप्त करते हैं, तो इंडेक्स स्वचालित रूप से अपडेट हो जाएगा, जैसा कि यहां दिखाया गया है:
> EXPIRE "movie:11002" 15 (integer) 1
यदि आप 15 सेकंड प्रतीक्षा करते हैं और खोज क्वेरी चलाते हैं, तो आप देखेंगे कि मूवी को इंडेक्स से हटा दिया गया है।
यह काफी शक्तिशाली है जब आप एफेमेरल खोज करना चाहते हैं और डेटाबेस को डेटा और इंडेक्स की समाप्ति का प्रबंधन करने देते हैं। आप एफेमेरल खोज के बारे में अधिक जानकारी हमारे ब्लॉग पोस्ट में पा सकते हैं जो द केस फॉर एफेमेरल सर्च को रेखांकित करता है।
यहां से मैं कहां जा सकता हूँ?
इस पोस्ट ने RediSearch की कुछ मूल बातें साझा की हैं, और दिखाया है कि डेटा इंडेक्स करना आपके एप्लिकेशन कोड से पारदर्शी है। यह कार्यक्षमता RediSearch 2.0 में नई है, क्योंकि RediSearch 1.x में डेवलपर्स को डेटा इंडेक्स करने के लिए विशेष रूप से FT.ADD कमांड का उपयोग करना पड़ता था।
इस ब्लॉग पोस्ट में चर्चा की गई खोज और इंडेक्सिंग कार्यक्षमता के अलावा, RediSearch में शक्तिशाली डेटा एग्रीगेशन क्षमताएं भी शामिल हैं, जो RediSearch दस्तावेज़ीकरण, ट्यूटोरियल, और ऑनलाइन कोर्स में शामिल हैं।
ट्यूटोरियल में वही डेटा है, लेकिन एक बड़े डेटासेट और अधिक नमूना क्वेरी और एग्रीगेशन के साथ। इसमें एक एप्लिकेशन भी शामिल है जो दिखाता है कि Java, Python, और Node.js जैसी प्रोग्रामिंग भाषाओं के साथ RediSearch का उपयोग कैसे करें। अधिक जानने के लिए, इन अतिरिक्त संसाधनों को देखें:
- RediSearch वेब पेज
- RediSearch 2.0 ट्यूटोरियल
- Rediscover उपयोग के मामले और प्रोजेक्ट