RediSearch 2.0 এখন পাবলিক প্রিভিউতে আছে! এই বড় রিলিজের অধিকাংশ ফিচার আপনার ফিডব্যাক দ্বারা চালিত, ফোকাস ডেভেলপার এক্সপেরিয়েন্স উন্নত করা এবং স্কেলেবিলিটি বাড়ানো। কিন্তু এই ব্লগ পোস্ট RediSearch 2.0-এর নতুন ডেটা ইন্ডেক্সিং ক্যাপাবিলিটি এবং ইন্ডেক্স তৈরি করার ভালো উপায় ব্যবহার শুরু করতে সাহায্য করার ওপর ফোকাস করে।
আপনার Redis ডাটাবেসের ভিতর একটি রিচ কোয়েরি এবং অ্যাগ্রিগেশন ইঞ্জিন থাকা ক্যাশিং বাইরে অনেক নতুন অ্যাপ্লিকেশনের দরজা খুলে দেয়। আপনি Redis কে আপনার প্রাইমারি ডাটাবেস হিসেবে ব্যবহার করতে পারেন এমন পরিস্থিতিতেও যেখানে আপনাকে জটিল কোয়েরি ব্যবহার করে ডেটা অ্যাক্সেস করতে হয়, কোডে জটিলতা যোগ না করে ডেটা আপডেট ও ইন্ডেক্স করতে। সবটি Redis-এর বিখ্যাত গতি, নির্ভরযোগ্যতা, এবং স্কেলেবিলিটির সাথে!
আরো জানতে, দেখুন Introducing RediSearch 2.0
শুরু করা যাক
প্র리오রেসিটি
RediSearch 2.0-এ শুরু করার জন্য, আপনার প্রয়োজন:
- Docker
- একটি Redis কমান্ড-লাইন ইন্টারফেস। আপনার দুটি প্রধান অপশন:
- redis-cli, Redis-সহ প্রদত্ত
- RedisInsight, একটি ফ্রি GUI স্ট্রিমলাইনড Redis অ্যাপ্লিকেশন ডেভেলপমেন্টের জন্য, যেটি একটি কমান্ড-লাইন ইন্টারফেসও অন্তর্ভুক্ত করে।
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 Hashes হিসেবে সংরক্ষিত করে, তাই আসুন দুটি মুভি ইনসার্ট করি:
> 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
ডাটাবেসে এখন দুটি Hash আছে। আপনি নিচের কমান্ড ব্যবহার করে সহজে ইনফরমেশন রিট্রিভ করতে পারেন, যদি আপনি মুভির কী জানেন (movie:11002):
> HMGET movie:11002 title rating 1) "Star Wars: Episode V - The Empire Strikes Back" 2) "8.7"
কিন্তু আপনি ডাটাবেস কোয়েরি কীভাবে করবেন title, genre, বা release_year ব্যবহার করে মুভির একটি তালিকা পেতে?
"Core" Redis ডেটা স্ট্রাকচারসহ, আপনাকে নিজে আপনার ইন্ডেক্স ম্যানেজ করতে হয় Sets ব্যবহার করে genre কে মুভি ID-এর তালিকার সাথে অ্যাসোসিয়েট করার জন্য, উদাহরণস্বরূপ, এবং আপনার অ্যাপ্লিকেশনে অনেক কোড যোগ করতে হয় ইন্ডেক্স ম্যানেজ ও কোয়েরি করার জন্য।
কিন্তু RediSearch-এ আপনি সিম্পলি আপনার ডেটার সাথে জড়িত একটি ইন্ডেক্স ডিফাইন করতে পারেন এবং ডাটাবেসকে সেগুলো ম্যানেজ করতে দিতে পারেন। আপনি তারপর কোয়েরি ইঞ্জিন ব্যবহার করে সেকেন্ডারি ইন্ডেক্স ব্যবহার করে ডেটা কোয়েরি/সার্চ করতে পারেন।
মুভি জন্য একটি RediSearch ইন্ডেক্স তৈরি করুন
একটি ইন্ডেক্স তৈরি করতে, আপনাকে একটি স্কিমা ডিফাইন করতে হবে ফিল্ড এবং তাদের টাইপ লিস্ট করতে যেগুলো ইন্ডেক্সড হবে, এবং যেগুলো আপনি আপনার কোয়েরিতে ব্যবহার করতে পারেন।
এই উদাহরণে আপনি চারটি ফিল্ড ইন্ডেক্স করবেন:
- Title
- Release year
- Rating
- Genre
ইন্ডেক্স তৈরি করা হয় 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 শুধু Hash স্ট্রাকচার সাপোর্ট করে, কিন্তু এই প্যারামিটার ভবিষ্যতে RediSearch-কে অন্যান্য স্ট্রাকচার ইন্ডেক্স করতে দেবে।)
- PREFIX 1 “movie:”: কীগুলোর প্রিফিক্স যেগুলো ইন্ডেক্স করা উচিত। এটি একটি লিস্ট, তাই যেহেতু আমরা শুধু movie:* কীগুলো ইন্ডেক্স করতে চাই, সংখ্যাটি ১। আপনি যদি মুভি এবং TV শো একই ফিল্ডসহ ইন্ডেক্স করতে চান, আপনি ব্যবহার করতে পারেন: PREFIX 2 “movie:” “tv_show:”
- SCHEMA …: স্কিমা ডিফাইন করে, ফিল্ড এবং তাদের টাইপ যেগুলো ইন্ডেক্স করা হবে। আপনি কমান্ডে দেখতে পাচ্ছেন, আমরা TEXT, NUMERIC, এবং TAG, এবং SORTABLE প্যারামিটার ব্যবহার করছি।
RediSearch 2.0 ইঞ্জিন PREFIX মানগুলো ব্যবহার করে ডাটাবেস স্ক্যান করবে, এবং স্কিমা ডেফিনিশন অনুযায়ী ইন্ডেক্স আপডেট করবে। এতে একটি বিদ্যমান অ্যাপ্লিকেশনে ইন্ডেক্স যোগ করা সহজ হয় যা Hashes ব্যবহার করে, আপনার কোড পরিবর্তন করার প্রয়োজন নেই।
আপনি নিচের কমান্ড দিয়ে ইন্ডেক্স ইনফরমেশন দেখতে পারেন:
> FT.INFO idx:movie 1) index_name 2) idx:movie ... 46) 1) global_idle 2) (integer) 0 ...
এখন আমরা ইন্ডেক্স ব্যবহার করে ডাটাবেস কোয়েরি করার জন্য প্রস্তুত।
মুভি ডাটাবেস কোয়েরি করুন
এই সেকশনে আপনি FT.SEARCH কমান্ড এবং এর সিনট্যাক্স ব্যবহার করবেন; নোট করুন এই ব্লগ পোস্টের লক্ষ্য আপনাকে শুরু করতে সাহায্য করা, তাই আমরা বেসিক্সে থাকব এবং সব ডিটেইলে যাব না। RediSearch সম্পর্কে আরো জানতে, ডকুমেন্টেশন এবং টিউটোরিয়াল দেখুন।
ফুল-টেক্সট সার্চ কোয়েরি
RediSearch একটি ফুল-টেক্সট সার্চ ইঞ্জিন, যা অ্যাপ্লিকেশনকে পাওয়ারফুল কোয়েরি চালাতে দেয় Google-এর মতো। উদাহরণস্বরূপ, "war"-রিলেটেড ইনফরমেশন ধারণকারী সব মুভি সার্চ করতে, আপনি নিচের কমান্ড রান করবেন:
> 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 মুভিটি খুঁজে পাওয়া গেল, যদিও আপনি শুধু "war" শব্দটি ব্যবহার করলেন "Wars"-কে টাইটেলে ম্যাচ করার জন্য। এটিটি কারণ টাইটেলটি টেক্সট হিসেবে ইন্ডেক্সড হয়েছে, তাই ফিল্ডটি টোকেনাইজড এবং স্টেমড।
অপরদিক, কমান্ডটি কোনো ফিল্ড স্পেসিফাই করল না, তাই "war" শব্দটি (এবং সম্পর্কিত শব্দগুলো) ইন্ডেক্সের সব টেক্সট ফিল্ডে সার্চ করা হয়েছে। আপনি যদি নির্দিষ্ট ফিল্ডে সার্চ করতে চান, তবে @field নোটেশন ব্যবহার করুন, নিচের মতো:
> FT.SEARCH idx:movie "@title:war" RETURN 3 title release_year rating
আপনি এই সহজ ডেটাসেটের বিরুদ্ধে আরও ফুল-টেক্সট সার্চ কোয়েরি রান করতে পারেন, নিচে ডেমোন্স্ট্রেট করা হয়েছে (নোট: ডকুমেন্ট ছোট রাখতে, কোয়েরির রেজাল্ট দেখানো হয়নি):
Prefix matches:
> FT.SEARCH idx:movie "emp*" RETURN 3 title release_year rating
Fuzzy search:
> FT.SEARCH idx:movie "%gdfather%" RETURN 3 title release_year rating
Unions:
> FT.SEARCH idx:movie "war | %gdfather% " RETURN 3 title release_year rating
কোয়েরি সিনট্যাক্স সম্পর্কে আরও ইনফরমেশন RediSearch ডকুমেন্টেশনে পাবেন।
Tag field সার্চ
"genre" ট্যাগ ফিল্ড ব্যবহার করে সব "drama" মুভি খুঁজুন:
> 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
আপনি ১৫ সেকেন্ড অপেক্ষা করুন এবং সার্চ কোয়েরি রান করুন, আপনি দেখবেন মুভিটি ইন্ডেক্স থেকে রিমুভ হয়েছে।
এটি খুব শক্তিশালী যখন আপনি ইফিমেরাল সার্চ করতে চান এবং ডাটাবেসকে ডেটা ও ইন্ডেক্সের এক্সপায়ারেশন ম্যানেজ করতে দিতে চান। ইফিমেরাল সার্চ সম্পর্কে আরও ইনফরমেশন আমাদের ব্লগ পোস্টে পাবেন The Case for Ephemeral Search রচনা করা।
এখান থেকে কোথায় যেতে পারি?
এই পোস্ট RediSearch-এর কিছু বেসিক শেয়ার করল এবং দেখাল কীভাবে ডেটা ইন্ডেক্সিং আপনার অ্যাপ্লিকেশন কোড থেকে ট্রান্সপারেন্ট। এই ফাংশনালিটি RediSearch 2.0-এ নতুন, যেহেতু RediSearch 1.x-এ ডেভেলপারদের স্পেসিফিক্যালি FT.ADD কমান্ড ব্যবহার করতে হতো ডেটা ইন্ডেক্স করার জন্য।
এই ব্লগ পোস্টে আলোচনা করা সার্চ ও ইন্ডেক্সিং ফাংশনালিটির বাইরে, RediSearch এ পাওয়ারফুল ডেটা অ্যাগ্রিগেশন ক্যাপাবিলিটিও অন্তর্ভুক্ত করে, যা RediSearch ডকুমেন্টেশন, টিউটোরিয়াল, এবং অনলাইন কোর্সে কভার করা হয়েছে।
টিউটোরিয়ালে একই ডেটা আছে, কিন্তু বড় ডেটাসেট এবং আরও স্যাম্পল কোয়েরি ও অ্যাগ্রিগেশন। এটিও একটি অ্যাপ্লিকেশন দেখায় কীভাবে RediSearch প্রোগ্রামিং ল্যাঙ্গুয়েজ যেমন Java, Python, এবং Node.js-সহ ব্যবহার করতে হয়। আরও জানতে, এই অতিরিক্ত রিসোর্স চেক আউট করুন:
- RediSearch ওয়েব পেজ
- RediSearch 2.0 Tutorial
- Rediscover Use Cases and Projects