RediSearch 2.0 अब सार्वजनिक पूर्वावलोकन में उपलब्ध है! इस प्रमुख नई रिलीज़ की अधिकांश विशेषताएं आपकी प्रतिक्रिया से प्रेरित हैं, जिसमें डेवलपर अनुभव को बेहतर बनाने और मापनीयता को बेहतर बनाने पर ध्यान दिया गया है। लेकिन यह ब्लॉग पोस्ट आपको RediSearch 2.0 की नई डेटा अनुक्रमण क्षमताओं और अनुक्रमणिका बनाने के बेहतर तरीकों का उपयोग करने में मदद करने पर केंद्रित है।
आपके रेडिस डेटाबेस के अंदर एक समृद्ध क्वेरी और एकत्रीकरण इंजन होने से कई नए अनुप्रयोगों के द्वार खुलते हैं जो कैशिंग से परे जाते हैं। आप अपने प्राथमिक डेटाबेस के रूप में रेडिस का उपयोग तब भी कर सकते हैं जब आपको जटिल प्रश्नों का उपयोग करके डेटा तक पहुंचने की आवश्यकता होती है, बिना डेटा को अपडेट और इंडेक्स करने के लिए कोड में जटिलता जोड़े। यह सब रेडिस की प्रसिद्ध गति, विश्वसनीयता और मापनीयता के साथ!
नया क्या है, इसके बारे में अधिक जानने के लिए देखें RediSearch 2.0 का परिचय
आरंभ करना
आवश्यकताएं
RediSearch 2.0 के साथ आरंभ करने के लिए, आपको निम्न की आवश्यकता होगी:
- डॉकर
- एक रेडिस कमांड-लाइन इंटरफ़ेस। आपके दो मुख्य विकल्प हैं:
- रेडिस-क्ली, रेडिस के साथ प्रदान किया गया
- RedisInsight, सुव्यवस्थित Redis अनुप्रयोग विकास के लिए एक निःशुल्क GUI, जिसमें एक कमांड-लाइन इंटरफ़ेस भी शामिल है।
RediSearch सक्षम के साथ एक Redis डेटाबेस प्राप्त करें
आप विभिन्न तरीकों से RediSearch 2.0 को स्थापित और उपयोग कर सकते हैं:
- रेडिस एंटरप्राइज क्लाउड
- रेडिस एंटरप्राइज सॉफ्टवेयर
- RediSearch बायनेरिज़
- RediSearch के स्रोत
- डॉकर छवि
सादगी के लिए, यह ब्लॉग पोस्ट डॉकर छवियों का उपयोग करेगा। (यदि आपने पहले ही 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 डेटाबेस से कनेक्ट करें।
यदि आपने डॉकर के साथ अपना रेडिस इंस्टेंस शुरू किया है, तो आप redis-cli का उपयोग करने के लिए निम्न कमांड का उपयोग कर सकते हैं। कंटेनर में एम्बेड किया गया:
> docker exec -it redis-search-2 redis-cli
यदि आप Redis Insight का उपयोग करना चाहते हैं, तो अपना RediSearch उदाहरण जोड़ें और CLI पर जाएँ।
डेटा डालें
अब आप कुछ डेटा डालने के लिए तैयार हैं। यह उदाहरण रेडिस हैश के रूप में संग्रहीत मूवी डेटा का उपयोग करता है, तो चलिए कुछ फिल्में सम्मिलित करते हैं:
> 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"
लेकिन आप शीर्षक . का उपयोग करके फिल्मों की सूची प्राप्त करने के लिए डेटाबेस को कैसे क्वेरी कर सकते हैं? , शैली , या release_year ?
उदाहरण के लिए, "कोर" रेडिस डेटा संरचनाओं के साथ, आपको शैली को मूवी आईडी की सूची से जोड़ने के लिए सेट का उपयोग करके अपनी अनुक्रमणिका को स्वयं प्रबंधित करना होगा, और अनुक्रमणिका को प्रबंधित करने और क्वेरी करने के लिए अपने एप्लिकेशन में बहुत सारे कोड जोड़ना होगा।
लेकिन 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:मूवी :अनुक्रमणिका का नाम, जिसका उपयोग आप क्वेरी करते समय करेंगे
- ऑन हैश :अनुक्रमित की जाने वाली संरचना का प्रकार। (ध्यान दें कि RediSearch 2.0 केवल हैश संरचना का समर्थन करता है, लेकिन यह पैरामीटर RediSearch को भविष्य में अन्य संरचनाओं को अनुक्रमित करने की अनुमति देगा।)
- PREFIX 1 “मूवी:” :चाबियों का उपसर्ग जिसे अनुक्रमित किया जाना चाहिए। यह एक सूची है, इसलिए चूंकि हम केवल फिल्म को अनुक्रमित करना चाहते हैं:* कुंजी संख्या 1 है। यदि आप फिल्मों और टीवी शो को समान फ़ील्ड के साथ अनुक्रमित करना चाहते हैं, तो आप इसका उपयोग कर सकते हैं:PREFIX 2 "मूवी:" "tv_show:"ली>
- स्कीमा … :स्कीमा, फ़ील्ड और उनके प्रकार को अनुक्रमणिका में परिभाषित करता है। जैसा कि आप कमांड में देख सकते हैं, हम टेक्स्ट, न्यूमेरिक, और टैग, और सॉर्टेबल पैरामीटर का उपयोग कर रहे हैं।
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 एक पूर्ण-पाठ खोज इंजन है, जो एप्लिकेशन को शक्तिशाली क्वेरीज़ la 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"
जैसा कि आप देख सकते हैं, फिल्म स्टार वार्स:एपिसोड वी—द एम्पायर स्ट्राइक्स बैक पाया जाता है, भले ही आपने केवल “युद्ध . शब्द का प्रयोग किया हो “युद्ध . से मेल खाने के लिए "शीर्षक में। ऐसा इसलिए है क्योंकि शीर्षक को टेक्स्ट के रूप में अनुक्रमित किया गया है, इसलिए फ़ील्ड को टोकन और स्टेम किया गया है।
साथ ही, कमांड कोई फ़ील्ड निर्दिष्ट नहीं करता है, इसलिए शब्द "युद्ध" (और संबंधित शब्द ) अनुक्रमणिका के सभी पाठ क्षेत्रों में खोजा जाता है। यदि आप विशिष्ट फ़ील्ड खोजना चाहते हैं, तो आप @फ़ील्ड . का उपयोग करेंगे संकेतन, जैसा कि यहां दिखाया गया है:
> 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 दस्तावेज़ में प्राप्त कर सकते हैं।
टैग फ़ील्ड खोज
सभी "नाटक" मूवी खोजने के लिए टैग फ़ील्ड "शैली" का उपयोग करें:
> 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 दस्तावेज़ीकरण, ट्यूटोरियल और ऑनलाइन पाठ्यक्रम में शामिल हैं।
ट्यूटोरियल में समान डेटा होता है, लेकिन बड़े डेटासेट और अधिक नमूना क्वेरी और एकत्रीकरण के साथ। इसमें एक एप्लिकेशन भी शामिल है जो दिखाता है कि जावा, पायथन और Node.js जैसी प्रोग्रामिंग भाषाओं के साथ RediSearch का उपयोग कैसे करें। अधिक जानने के लिए, इन अतिरिक्त संसाधनों को देखें:
- RediSearch वेब पेज
- RediSearch 2.0 ट्यूटोरियल
- उपयोग के मामलों और परियोजनाओं को फिर से खोजें