আপনার রেল ব্যাকএন্ডে কীভাবে একটি শক্তিশালী অনুসন্ধান ইঞ্জিন যুক্ত করা যায় তা এখানে

আনসপ্ল্যাশ-এ সাইমন আব্রামের ছবি

রেল অন রেল ডেভেলপার হিসাবে আমার অভিজ্ঞতায় আমাকে ওয়েব অ্যাপ্লিকেশনগুলিতে প্রচুর অনুসন্ধান কার্যকারিতা যুক্ত করার সাথে মোকাবিলা করতে হয়েছিল। প্রকৃতপক্ষে, প্রয়োজনীয় সার্চ ইঞ্জিন কার্যকারিতা নিয়ে কাজ করেছি এমন প্রায় সব অ্যাপ্লিকেশনই আমার মূল কোর ফাংশন হিসাবে একটি অনুসন্ধান ইঞ্জিন ছিল।

আমরা প্রতিদিন যে অ্যাপ্লিকেশনগুলি ব্যবহার করি সেগুলির অনেকগুলি ভাল অনুসন্ধান ইঞ্জিন ছাড়া অকেজো হয়ে যায় less উদাহরণস্বরূপ, অ্যামাজনে, আপনি ওয়েবসাইটে পাওয়া 550 মিলিয়নেরও বেশি পণ্য থেকে কয়েক সেকেন্ডের মধ্যে একটি সুনির্দিষ্ট পণ্যটি সন্ধান করতে পারেন - বিভাগ ফিল্টার, দিকগুলি এবং একটি প্রস্তাবিত সিস্টেমের সাথে একত্রে একটি পূর্ণ-পাঠ্য অনুসন্ধানের জন্য সমস্ত ধন্যবাদ।

আকার, দাম, উপলভ্য তারিখ ইত্যাদির মতো বাড়ির বৈশিষ্ট্যগুলির উপর ভিত্তি করে ফিল্টারগুলির সাথে একটি স্থানিক অনুসন্ধানের সমন্বয় করে এয়ারবিএনবি আপনাকে একটি অ্যাপার্টমেন্টে অনুসন্ধান করতে দেয়

এবং স্পটিফাইফ, নেটফ্লিক্স, ইবে, ইউটিউব ... সমস্তই একটি অনুসন্ধান ইঞ্জিনের উপর নির্ভর করে।

এই নিবন্ধে, আমি কীভাবে ইলাস্টিকসার্ক ব্যবহার করে রেল 5 এপিআই ব্যাকএন্ডে একটি রুবি বিকাশ করব তা বর্ণনা করতে যাচ্ছি। ইলাস্টিকসার্ক বর্তমানে ডিবি ইঞ্জিন র‌্যাঙ্কিং অনুসারে সর্বাধিক জনপ্রিয় ওপেন সোর্স অনুসন্ধান প্ল্যাটফর্ম।

এই নিবন্ধটি ইলাস্টিকসার্কের বিবরণ এবং কীভাবে এটি স্পিনস এবং সোলারের মতো প্রতিযোগীদের সাথে তুলনা করে তা বিশদে যাবে না। পরিবর্তে, এটি পরীক্ষামূলক চালিত বিকাশের পদ্ধতির ব্যবহার করে রেল ও ইলাস্টিকসার্কে রুবির সাথে কীভাবে JSON এপিআই ব্যাকএন্ড বাস্তবায়ন করতে পারে তার একটি ধাপে ধাপে গাইড সরবরাহ করে।

এই নিবন্ধটি কভার:

  1. পরীক্ষা, উন্নয়ন এবং উত্পাদন পরিবেশের জন্য ইলাস্টিক অনুসন্ধান সেটআপ
  2. রুবি অন রেল পরীক্ষার পরিবেশ সেট আপ করুন
  3. ইলাস্টিকসার্কের সাথে মডেল সূচীকরণ
  4. অনুসন্ধান API এর শেষ পয়েন্ট

আমার পূর্ববর্তী নিবন্ধের মতো, সার্ভারলেস আর্কিটেকচারের মাধ্যমে আপনার পারফরম্যান্সকে কীভাবে উন্নত করা যায়, আমি এক ধাপে ধাপে টিউটোরিয়ালটিতে সমস্ত কিছু কভার করব। তারপরে আপনি এটি নিজের জন্য চেষ্টা করে দেখতে পারেন এবং আরও জটিল কিছু তৈরি করার জন্য একটি সাধারণ কাজের উদাহরণ থাকতে পারে।

নমুনা অ্যাপ্লিকেশনটি একটি মুভি সার্চ ইঞ্জিন। এটিতে একটি একক JSON এপিআই এন্ডপয়েন্ট থাকবে যা আপনি চলচ্চিত্রের শিরোনাম এবং সংক্ষিপ্তসারগুলির জন্য একটি সম্পূর্ণ পাঠ্য অনুসন্ধান করতে ব্যবহার করতে পারেন।

1. স্থিতিস্থাপক অনুসন্ধান সেটআপ

ইলাস্টিকসার্ক হ'ল বর্ধিত সংখ্যক ব্যবহারের কেস সমাধান করতে সক্ষম একটি বিতরণকারী, রিস্টলফুল অনুসন্ধান এবং বিশ্লেষণ ইঞ্জিন। ইলাস্টিক স্ট্যাকের হৃদয় হিসাবে এটি আপনার ডেটা কেন্দ্রীয়ভাবে সংরক্ষণ করে যাতে আপনি প্রত্যাশিতটি দেখতে এবং অপ্রত্যাশিত উদ্ঘাটিত করতে পারেন। - www.elastic.co/products/elasticsearch

ডিবি-ইঞ্জিনগুলির অনুসন্ধান ইঞ্জিনগুলির র‌্যাঙ্কিং অনুসারে, ইলাস্টিকসার্ক আজ পর্যন্ত (এপ্রিল 2018 হিসাবে) সর্বাধিক জনপ্রিয় অনুসন্ধান ইঞ্জিন প্ল্যাটফর্ম is এবং এটি ২০১৫ সালের শেষের পরে, যখন অ্যামাজন এডাব্লুএস ইলাস্টিকসার্চ পরিষেবা চালু করার ঘোষণা করেছিল, এডাব্লুএস ম্যানেজমেন্ট কনসোলের মাধ্যমে একটি ইলাস্টিকসার্চ ক্লাস্টার শুরু করার উপায়।

ডিবি ইঞ্জিনগুলি অনুসন্ধান ইঞ্জিনের র‌্যাঙ্কিংয়ের প্রবণতা

ইলাস্টিকসার্ক ওপেন সোর্স। আপনি ওয়েবসাইট থেকে আপনার পছন্দসই সংস্করণটি ডাউনলোড করতে পারেন এবং যেখানে খুশি তা চালাতে পারেন। আমি যখন উত্পাদন পরিবেশের জন্য এডাব্লুএস ইলাস্টিকসার্ক পরিষেবাটি ব্যবহার করার পরামর্শ দিই, আমি পরীক্ষা এবং বিকাশের জন্য আমার স্থানীয় মেশিনে ইলাস্টিকসার্ক চালানো পছন্দ করি।

প্রথমে (বর্তমানে) সর্বশেষতম ইলাস্টিকসার্ক সংস্করণ (6.2.3) ডাউনলোড করুন এবং এটি আনজিপ করুন ip একটি টার্মিনাল খুলুন এবং এটি চালান

$ উইজেট https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.2.3.zip
$ ইলাস্টিকসার্চ -6.2.3.zip আনজিপ করুন

বিকল্পভাবে, আপনি এখানে আপনার ব্রাউজার থেকে ইলাস্টিকসার্চ ডাউনলোড করতে পারেন এবং এটি আপনার পছন্দের প্রোগ্রামটি থেকে আনজিপ করতে পারেন।

2. পরীক্ষা পরিবেশের সেটআপ

আমরা রুবে অন রেইল 5 এপিআই দিয়ে একটি ব্যাকএন্ড অ্যাপ্লিকেশন তৈরি করতে যাচ্ছি। এমন একটি মডেল থাকবে যা ফিল্মগুলি চিত্রিত করে। স্থিতিস্থাপক অনুসন্ধান এটি সূচী করে এবং এটি একটি এপিআই এন্ডপয়েন্টের মাধ্যমে অনুসন্ধান করা যায়।

প্রথমে একটি নতুন রেল অ্যাপ্লিকেশন তৈরি করা যাক। আপনি ইলাস্টিকসার্ক আগে যে একই ফোল্ডারে ডাউনলোড করেছেন সেটিতে নতুন রেল অ্যাপ তৈরি করার জন্য কমান্ডটি চালান run আপনি যদি রেলের অন রুবেলে নতুন হন, আপনার পরিবেশ সেট আপ করার জন্য এটি শুরু করার গাইডটি পড়ুন।

$ নতুন নতুন সিনেমা অনুসন্ধান --api; সিডি মুভি অনুসন্ধান

এপিআই অপশনটি ব্যবহার করে ব্রাউজার অ্যাপ্লিকেশনগুলির জন্য প্রাথমিকভাবে ব্যবহৃত মিডলওয়্যারের সমস্ত অন্তর্ভুক্ত নয়। ঠিক আমরা কী চাই রেল অন রেলস ম্যানুয়ালটিতে সরাসরি এটি সম্পর্কে আরও পড়ুন।

এখন আসুন আমাদের প্রয়োজনীয় সমস্ত রত্ন যুক্ত করুন। আপনার রত্নটি খুলুন এবং নিম্নলিখিত কোড যুক্ত করুন:

# রত্ন
... # ইলাস্টিকসার্ক রত্নপাথরের ইলাস্টিকসার্চ-মডেল 'জুয়েল' রাবার সন্ধানের রেলগুলি'র সংহতকরণ
গোষ্ঠী: বিকাশ: একটি পরীক্ষা করুন ... # টেস্ট ফ্রেমওয়ার্ক রত্ন পাথর 'আরএসপেক' রত্ন পাথর "আরএসপেক-রেলস" শেষ
গোষ্ঠী: পরীক্ষা করুন ... # টেস্টগুলির মধ্যে ডেটাবেস পরিষ্কার করুন এডেলস্টাইন 'ডাটাবেস_ক্লেয়ার' # পরীক্ষার জন্য ES প্রোগ্রামগতভাবে ES শুরু করুন এবং বন্ধ করুন এডেলস্টাইন 'ইলাস্টিক-অনুসন্ধান-এক্সটেনশানস' সমাপ্তি ...

আমরা দুটি ইলাস্টিক অনুসন্ধান জহর যুক্ত করছি যা আমাদের মডেলকে সূচক এবং অনুসন্ধান অনুসন্ধান চালানোর জন্য প্রয়োজনীয় সমস্ত পদ্ধতি সরবরাহ করে। এক্সটেনশনগুলি আরএসপেক, আরএসপেক-রেলস, ডাটাবেস_ক্ল্যানার এবং ইলাস্টিক অনুসন্ধানটি পরীক্ষার জন্য ব্যবহৃত হয়।

আপনার রত্ন ফাইলটি সংরক্ষণ করার পরে, আপনি যুক্ত কোনও রত্ন ইনস্টল করতে বান্ডিল ইনস্টলেশন চালান run

এখন আসুন নিম্নলিখিত কমান্ডটি চালিয়ে আরএসপিকে কনফিগার করুন:

রেলগুলি তৈরি করুন আরএসপেক: ইনস্টল করুন

এই কমান্ডটি একটি স্পেসিফিকেশন ফোল্ডার তৈরি করে এবং এতে spec_helper.rb এবং Rails_helper.rb যুক্ত করে। আপনার অ্যাপ্লিকেশন প্রয়োজন অনুসারে এগুলি আরএসপিএকে কাস্টমাইজ করতে ব্যবহার করা যেতে পারে।

এক্ষেত্রে আমরা Rail_helper.rb তে একটি ডাটাবেসক্লিয়নার ব্লক যুক্ত করি যাতে প্রতিটি পরীক্ষা খালি ডাটাবেসে চালিত হয়। প্রতিবার পরীক্ষার স্যুট শুরু হওয়ার সাথে সাথে আমরা একটি ইলাস্টিক অনুসন্ধান পরীক্ষার সার্ভার শুরু করার জন্যও spec_helper.rb পরিবর্তন করি এবং পরীক্ষার স্যুটটি শেষ হয়ে গেলে এটি আবার বন্ধ করে দেয়।

এই দ্রবণটি রওলান ওল্টনের নিবন্ধের উপর ভিত্তি করে রেলগুলিতে টেস্টিং ইলাস্টিকের অনুসন্ধান করা উচিত। তার জন্য অনেক তালি!

ডেটাবেস ক্লিনার দিয়ে শুরু করা যাক। Spec / Rails_helper.rb এ নিম্নলিখিত কোড যুক্ত করুন:

# spec / Rails_helper.rb ... আরএসপেক.কনফিগুরে করুন | কনফিগার | ...
কনফিগারেশন.এর পূর্বে (: স্যুট) ডাটাবেসক্লিনার.স্ট্রেটজি =: লেনদেন ডেটাবেস ক্লিনার.ক্লিন_উইথ (: সংক্ষিপ্তকরণ) শেষ
config.around (: প্রতিটি) করুন | উদাহরণ | ডাটাবেসক্লিয়েনার.ক্লিনিং উদাহরণস্বরূপ।আর শেষ প্রান্তটি চালান

এরপরে, আসুন ইলাস্টিক অনুসন্ধান পরীক্ষার সার্ভার সেটআপটি দেখুন। আমাদের কিছু কনফিগারেশন ফাইল যুক্ত করতে হবে যাতে আমাদের ইলাস্টিকসার্চ এক্সিকিউটেবলটি রেলগুলি জানতে পারে। বর্তমান পরিবেশের উপর ভিত্তি করে কোন বন্দরটি চালানো হবে তাও এটি নির্দিষ্ট করে। এটি করতে আপনার কনফিগারেশন ফোল্ডারে একটি নতুন কনফিগারেশন ফাইল যুক্ত করুন:

# কনফিগারেশন / ইলাস্টিকসার্চ.আইএমএল
বিকাশ: এবং স্ট্যান্ডার্ড এস_বিন: '../elasticsearch-6.2.3/bin/elasticsearch' হোস্ট: 'http: // লোকালহস্ত: 9200' পোর্ট: '9200' চেক: এস_বিন: '../elasticsearch-6.2.3/ বিন / ইলাস্টিকসার্ক 'হোস্ট:' http: // লোকালহস্ট: 9250 'পোর্ট:' 9250 'মঞ্চায়ন: <<: * মানক উত্পাদন: এস_বিন:' ../elasticsearch-6.2.3/bin/elasticsearch 'হোস্ট:' http: // লোকালহোস্ট: 9400 'পোর্ট:' 9400 '

আপনি যে ফোল্ডারে ইলাস্টিকসার্চ ডাউনলোড করেছেন সেখানে আপনি যদি রেল অ্যাপ্লিকেশন তৈরি না করেন বা আপনি যদি ইলাস্টিকসার্কের আলাদা সংস্করণ ব্যবহার করে থাকেন তবে আপনাকে এখানে এস_বিন পাথ সামঞ্জস্য করতে হবে।

এখন আপনার আরম্ভের ফোল্ডারে একটি নতুন ফাইল যুক্ত করুন যা আপনি সবে যুক্ত করা কনফিগারেশন থেকে পড়ে:

# কনফিগারেশন / ইনিশিয়ালাইজার / ইলাস্টিকসার্চ.আরবি
ফাইল.এক্সেস্ট থাকলে? ("কনফিগারেশন / ইলাস্টিকসার্চ.আইএমএল") কনফিগারেশন = ইয়ামএল.লোড_ফিল ("কনফিগারেশন / ইলাস্টিকআরচ.আইএমএল") [রেইলস.ইনভ]

অবশেষে, আসুন ইলেস্টিকসার্চ পরীক্ষার সেটআপ অন্তর্ভুক্ত করার জন্য spec_helper.rb পরিবর্তন করুন। এর অর্থ হ'ল আপনি একটি ইলাস্টিকআরচ টেস্ট সার্ভার শুরু এবং বন্ধ করুন এবং আমাদের রেলস মডেলটির জন্য ইলাস্টিক অনুসন্ধান সূচী তৈরি / মুছুন।

# spec / spec_helper.rb
প্রয়োজন 'ইলাস্টিক' / এক্সটেনশনগুলি / পরীক্ষা / ক্লাস্টারের জন্য 'ইয়ামল' প্রয়োজন
আরএসপেক.কমফিগার করুন | কনফিগার | ... # যদি প্রয়োজন হয় তবে ইলাস্টিকসर्च এস_কনফিগ = ইয়ামএল.লোড_ফাইলে ("কনফিগারেশন / ইলাস্টিকসার্চ.আইএমএল") ["পরীক্ষা"] ইএস_বিএন = এস_কনফিগ ["এসএসবিন"] ইএসপোর্ট = এস_কনফিগ ["পোর্ট"] এর জন্য একটি ইন-মেমরি ক্লাস্টার শুরু করুন
config.before: all, elasticsearch: true do Elasticsearch :: Exptionss :: Test :: Cluster.start (কমান্ড: ES_BIN, পোর্ট: ES_PORT.to_i, নোড: 1, সময়সীমা: 120), যদি ইলাস্টিকস্যাচার :: এক্সটেনশনস :: পরীক্ষা :: Cluster.running? (আদেশ: ES_BIN, অন: ES_PORT.to_i) সমাপ্ত End
পরীক্ষার রান কনফিগারেশন পরে ইলাস্টিকসার্চ ক্লাস্টার বন্ধ করুন। পরে: স্যুট ডো ইলাস্টিকারচ :: এক্সটেনশনস :: টেস্ট :: ক্লাস্টার.স্টপ (কমান্ড: ইএস_বিন, পোর্ট: ইএস_পোরটি.ট_আই, নোড: 1) যদি ইলাস্টিকস্যাচার :: এক্সটেনশনস :: টেস্ট :: Cluster.running? (আদেশ: ES_BIN, অন: ES_PORT। To_i) সমাপ্ত
# সমস্ত স্থিতিস্থাপক অনুসন্ধানযোগ্য মডেলগুলির কনফিগারেশনের সূচী তৈরি করুন: পূর্বে: প্রতিটি, স্থিতিস্থাপক অনুসন্ধান: সত্যই ডু অ্যাক্টিভেকর্ড :: বেস.ডেসেন্ডেন্টস.ইচ ডু | মডেল | যদি মডেল.নিগ্রহ_? (: __ স্থিতিস্থাপক অনুসন্ধান__) মডেল শুরু করুন .__ ইলাস্টিক সন্ধান করুন __। create_index! মডেল .__ ইলাস্টিক সার্চ __। রিফ্রেশ_ইনডেক্স! রেসকিউ => ইলাস্টিকসার্ক :: পরিবহন :: পরিবহন :: ফেহলার :: নটফাউন্ড # এটি # for এর জন্য ইলাস্টিকসার্চ সূচক তৈরি করার সময় কনসোলে রেসকিউ => ই এসটিডিআর.পুটস "এ লেখা ত্রুটিগুলি" সূচকের অস্তিত্ব নেই "সমাপ্ত করে Model.name} একটি ত্রুটি ঘটেছে: # {e.inspect} "সমাপ্তি সমাপ্তি সমাপ্তি
# পরীক্ষার কনফিগারেশনের মধ্যে একটি পরিষ্কার অবস্থা নিশ্চিত করার জন্য সমস্ত স্থিতিস্থাপক অনুসন্ধানযোগ্য মডেলগুলির উপর সূচকগুলি সাফ করুন: প্রতিটি, স্থিতিস্থাপক অনুসন্ধান: সত্য ডু অ্যাক্টিভেকর্ড :: বেস.ডেসেন্ডেন্টস.ইচ ডু | মডেল | মডেল.নিগ্রহ_কে? (: __ স্থিতিস্থাপক অনুসন্ধান__) মডেল শুরু করুন .__ ইলাস্টিক সন্ধান করুন __। মুছে ফেলুন! রেসকিউ => ইলাস্টিকসার্ক :: পরিবহন :: পরিবহন :: ফেহলার :: নটফাউন্ড # এটি "সূচকের অস্তিত্ব নেই" কনসোলকে লেখা ত্রুটিগুলি উদ্ধার করে রেসকিউ => ই এসটিডিআর.পুটস "# for এর জন্য ইলাস্টিক অনুসন্ধান সূচকটি সরানোর সময়। Model.name} একটি ত্রুটি ঘটেছে: # {e.inspect} "সমাপ্তি সমাপ্তি সমাপ্তি
শেষ

আমরা চারটি ব্লক সংজ্ঞায়িত করেছি:

  1. একটি আগে (: সমস্ত) ব্লক যা ইতিমধ্যে চালু না থাকলে একটি ইলাস্টিক অনুসন্ধান পরীক্ষার সার্ভার শুরু করে
  2. একটি পরে (: স্যুট) ব্লক যা এটি চলমান থাকলে ইলাস্টিক অনুসন্ধান পরীক্ষার সার্ভারটি বন্ধ করে দেবে
  3. পূর্ববর্তী (: প্রতিটি) ব্লক যা ইলাস্টিকসার্কের সাহায্যে কনফিগার করা প্রতিটি মডেলের জন্য একটি নতুন ইলাস্টিকস সূচক তৈরি করে
  4. একটি পরে (: প্রতিটি) ব্লক যা সমস্ত ইলাস্টিকসার্ক সূচকগুলি সাফ করে

স্থিতিস্থাপক অনুসন্ধান যুক্ত করা হচ্ছে: সত্যটি নিশ্চিত করে যে কেবল পরীক্ষিত স্থিতিস্থাপকগুলি এই ব্লকগুলি চালিত করে।

আমি দেখতে পেয়েছি যে আপনি একবারে সমস্ত পরীক্ষা চালালে এই সেটআপটি দুর্দান্ত কাজ করে। বিপরীতে, যদি আপনি একটি পরীক্ষা-চালিত বিকাশ পদ্ধতির ব্যবহার করে থাকেন এবং আপনি খুব ঘন ঘন আপনার পরীক্ষা পরিচালনা করেন তবে আপনাকে এই কনফিগারেশনে সামান্য পরিবর্তন করতে হবে। আপনি যখনই এটি পরীক্ষা করেন তখন আপনি আপনার ইলাস্টিক অনুসন্ধান পরীক্ষার সার্ভারটি শুরু এবং বন্ধ করতে চান না।

এই ক্ষেত্রে, আপনি পরীক্ষার সার্ভারটি বন্ধ হওয়ার পরে (: স্যুট) ব্লকের পরে মন্তব্য করতে পারেন। যখন আপনার আর প্রয়োজন হবে না তখন আপনি এটি ম্যানুয়ালি বা স্ক্রিপ্ট ব্যবহার করে বন্ধ করতে পারেন।

'ইলাস্টিকসার্চ / এক্সটেনশানস / টেস্ট / ক্লাস্টার' এস_কনফিগ = ইয়ামএল.লোড_ফায়াল ("কনফিগারেশন / ইলাস্টিকআরচ.আইএমএল") ["পরীক্ষা"] ইএস_বিএন = এস_কনফিগ ["এসএসবিন"] ইলাস্টিকআরচ :: এক্সটেনশনগুলি: : পরীক্ষা :: ক্লাস্টার.স্টপ (কমান্ড: ES_BIN, পোর্ট: ES_PORT.to_i, নোড: 1)

3. ইলাস্টিকসার্কের সাথে মডেল সূচীকরণ

এখন আসুন অনুসন্ধানের ফাংশন সহ আমাদের চলচ্চিত্রের মডেলটি বাস্তবায়ন শুরু করি। আমরা একটি পরীক্ষা চালিত উন্নয়ন পদ্ধতির ব্যবহার করি। এর অর্থ হ'ল আমরা প্রথমে পরীক্ষা লিখি, তারা ব্যর্থ হয় তা নির্ধারণ করে এবং তারপরে পাস করার জন্য কোড লিখি।

প্রথমে আমাদের মুভি মডেল যুক্ত করতে হবে, যার চারটি বৈশিষ্ট্য রয়েছে: একটি শিরোনাম (স্ট্রিং), একটি ওভারভিউ (পাঠ্য), একটি চিত্র url (স্ট্রিং) এবং একটি গড় ভোটের মান (ভাসা)।

s রেল g মডেল মুভি শিরোনাম: স্ট্রিং সংক্ষিপ্তসার: পাঠ্য চিত্র URL টি: স্ট্রিং ভোট_ভেদীজ: ভাসা at
Ails রেল ডিবি: মাইগ্রেট করুন

এখন সময় এসেছে আমাদের মডেলটিতে ইলাস্টিকসার্ক যুক্ত করা। আমাদের মডেলটি সূচকযুক্ত কিনা তা দেখতে একটি পরীক্ষা লিখি।

# স্পেস / মডেল / মুভি_স্পেক.আরবি'র 'রেলস হেল্পার' দরকার
আরএসপেক.ডিজক্রিপ মুভি, ইলাস্টিকসেরাচ: সত্য,: টাইপ =>: মডেলটি কি ইন্ডেক্স করা উচিত বলে আশা করা উচিত (মুভি .__ ইলাস্টিক সার্চ __। সূচক_এক্সেস্টস?)। সত্য শেষের শেষ

এই পরীক্ষাটি যাচাই করে যে মুভিটির জন্য একটি ইলাস্টিকস সূচক তৈরি করা হয়েছে। মনে রাখবেন, আমরা পরীক্ষা শুরু করার আগে, আমরা স্বয়ংক্রিয়ভাবে সমস্ত মডেলগুলিতে একটি ইলাস্টিকস সূচক তৈরি করব যা __elasticsearch__ পদ্ধতিতে সাড়া দেয়। এর অর্থ এমন সমস্ত মডেলের জন্য যা ইলাস্টিকসার্ক মডিউলগুলি ধারণ করে।

এটি ব্যর্থ হয় কিনা তা পরীক্ষা চালান।

বান্ডেল এক্সিকিউটিভ আরএসপেক স্পেক / মডেল / মুভি_স্পেক.আরবি

আপনি যখন প্রথমবার এই পরীক্ষাটি চালাবেন তখন আপনার লক্ষ্য করা উচিত যে ইলাস্টিকসার্ক পরীক্ষা সার্ভারটি শুরু হয়। পরীক্ষাটি ব্যর্থ হয় কারণ আমরা আমাদের চলচ্চিত্রের মডেলটিতে একটি ইলাস্টিক অনুসন্ধান মডিউল যোগ করি নি। এখন এটি ঠিক করা যাক। মডেলটি খুলুন এবং নিম্নলিখিত ইলাস্টিকসার্ক যুক্ত করুন:

# অ্যাপ / মডেল / মুভি.আরবি
অসাধারণ চলচিত্র

এটি আমাদের চলচ্চিত্রের মডেলটিতে কিছু ইলাস্টিক অনুসন্ধান পদ্ধতি যুক্ত করে, যেমন অনুপস্থিত __elasticsearch__ পদ্ধতি (যা পূর্ববর্তী পরীক্ষার রানটিতে ত্রুটি সৃষ্টি করেছিল) এবং অনুসন্ধান পদ্ধতি যা আমরা পরে ব্যবহার করব।

আবার পরীক্ষা চালান এবং দেখুন যে এটি পাস হয়েছে।

বান্ডেল এক্সিকিউটিভ আরএসপেক স্পেক / মডেল / মুভি_স্পেক.আরবি

দুর্দান্ত আমাদের একটি ইনডেক্সেড মুভি মডেল রয়েছে।

ডিফল্টরূপে, ইলাস্টিক্সারচ :: মডেল মডেলের সমস্ত বৈশিষ্ট্য সহ একটি সূচক তৈরি করে এবং এটি থেকে স্বয়ংক্রিয়ভাবে তাদের ধরণের তৈরি করে। সাধারণত আমরা তা চাই না। আমরা এখন মডেল সূচকটি সামঞ্জস্য করব যাতে এটির নিম্নলিখিত আচরণ থাকে:

  1. কেবল শিরোনাম এবং ওভারভিউ সূচী করা উচিত
  2. স্টেমিং ব্যবহার করা উচিত (অর্থাত্ "অভিনেতা" অনুসন্ধান করার সময়, "অভিনেতা" পাঠ্য সহ ফিল্মগুলিও ফিরে আসা উচিত এবং বিপরীতে)

আমরা মুভিটি যুক্ত হওয়ার পরে, আপডেট করা বা মুছে ফেলার সময়ও আমাদের সূচি আপডেট হওয়া চাই।

মুভি_স্পেক.আরবিতে নিম্নলিখিত কোড যুক্ত করে এটি পরীক্ষায় ফেলা যাক

# স্পেস / মডেল / মুভি_স্পেক.আরবি আরএসপেক.ডিজাইব মুভি, ইলাস্টিকসर्च: সত্য, টাইপ =>: মডেল ড ...
মুভি.ক্রিয়েট করার আগে (# প্রত্যেকে) বর্ণনা করুন (শিরোনাম: "রোমান হলিডে", সংক্ষিপ্ত বিবরণ: "1953 সালের একটি আমেরিকান রোমান্টিক কমেডি ফিল্ম ...", চিত্র_আরল: "উইকিমিডিয়া.com/ রোমান_হিডে.জেপজি", ভোটা_ভ্যারেজ: ৪.০) ফিল্ম __ ইলাস্টিক সন্ধান __। রিফ্রেশ_ইনডেক্স! সমাপ্তি এটি "সূচি শিরোনাম" প্রত্যাশা করা উচিত (মুভি.সন্ধান ("হলিডে")। রেকর্ডস.এল দৈর্ঘ্য)। একা (1) এটি "সূচি ওভারভিউ" প্রত্যাশা করা উচিত (মুভি.সন্ধান ("কমেডি")। রেকর্ডস। দৈর্ঘ্য) .এক (1) শেষে এটি "ইমেজ_পথ নয়" প্রত্যাশা করা উচিত (মুভি.সার্চ ("রোমান_হিলিড.জেপিজি")। রেকর্ডস.এল দৈর্ঘ্য) .একই (0) এর শেষে এটি "ভোট ভোটের উত্সকে সূচীকরণ করা উচিত নয়" আশা করে না (মুভি.সন্ধান ("4.0")। রেকর্ডস.সৌধ) .এক (0) সমাপ্তি
শেষ

আমরা প্রতিটি পরীক্ষার আগে একটি চলচ্চিত্র তৈরি করি কারণ আমরা প্রতিটি পরীক্ষা আলাদা করতে ডেটাবেসক্লিয়নারটি কনফিগার করেছি। ফিল্ম .__ ইলাস্টিক সার্চ __। রিফ্রেশ নতুন ফিল্মের ডেটা সেটটি অনুসন্ধানের জন্য তত্ক্ষণাত্ উপলব্ধ রয়েছে তা নিশ্চিত করার জন্য প্রয়োজনীয়।

আগের মতো পরীক্ষা চালান এবং দেখুন এটি ব্যর্থ।

দেখে মনে হচ্ছে আমাদের সিনেমাটি সূচিযুক্ত নয়। এটি কারণ আমরা এখনও আমাদের মডেলকে বলিনি যে সিনেমার তারিখগুলি পরিবর্তিত হয় তবে কী করবেন। ভাগ্যক্রমে, আমাদের চলচ্চিত্রের মডেলটিতে আরও একটি মডিউল যুক্ত করে এটি ঠিক করা যেতে পারে:

অসাধারণ চলচিত্র

ইলাস্টিকসার্ক :: মডেল :: কলব্যাকগুলি যখনই কোনও মুভি যুক্ত করা, পরিবর্তন করা, বা মোছা হয় তখনই ইলাস্টিক্স দস্তাবেজ আপডেট করে।

পরীক্ষার আউটপুট কীভাবে পরিবর্তন হয় তা দেখা যাক।

ঠিক আছে. এখন সমস্যাটি হ'ল আমাদের অনুসন্ধান পদ্ধতিটি এমন প্রশ্নগুলিও ফেরত দেয় যা ভোট_পরেজ এবং চিত্র_আরল বৈশিষ্ট্যগুলির সাথে মেলে। এটি ঠিক করার জন্য আমাদের স্থিতিস্থাপকীয় সূচক ম্যাপিংটি কনফিগার করতে হবে। অতএব, আমাদের বিশেষভাবে ইলাস্টিকসার্ককে জানাতে হবে যে সূচকগুলিতে কোন মডেলের বৈশিষ্ট্য।

# অ্যাপ / মডেল / মুভি.আরবি
অসাধারণ চলচিত্র
# ইলাস্টিক অনুসন্ধান সূচক সেটিং সূচক: {সংখ্যা_ উপরে_শার্ডস: 1 ma ম্যাপিংগুলি গতিশীল: 'ভুল' সূচকগুলি তৈরি করুন: শিরোনাম সূচকগুলি: ওভারভিউ শেষের শেষে

আবার পরীক্ষা চালান এবং দেখুন যে এটি পাস হয়েছে।

শীতল। এখন একটি স্টেমার যুক্ত করা যাক যাতে "অভিনেতা" এবং "অভিনেতা" এর মধ্যে কোনও পার্থক্য না থাকে। সর্বদা হিসাবে, আমরা প্রথমে পরীক্ষাটি লিখব এবং এটি ব্যর্থ হবে তা দেখুন।

মুভি.ক্রিয়েট করার আগে (# প্রত্যেকে) বর্ণনা করুন (শিরোনাম: "রোমান হলিডে", সংক্ষিপ্ত বিবরণ: "1953 সালের একটি আমেরিকান রোমান্টিক কমেডি ফিল্ম ...", চিত্র_আরল: "উইকিমিডিয়া.com/ রোমান_হিডে.জেপজি", ভোটা_ভ্যারেজ: ৪.০) ফিল্ম __ ইলাস্টিক সন্ধান __। রিফ্রেশ_ইনডেক্স! শেষ
...
এটি "শিরোনামে উঠেছে" আশা করা উচিত (মুভি.সন্ধান ("ছুটির দিনগুলি")। রেকর্ডস দৈর্ঘ্য)। টু ইক (1) সমাপ্তি
এটি "ওভারভিউ থেকে কাটা" হওয়া উচিত (মুভি.সর্চ ("চলচ্চিত্র") records রেকর্ডস দৈর্ঘ্য)।
শেষ

নোট করুন যে আমরা দুটি পদ্ধতিই পরীক্ষা করছি: ছুটির দিনগুলিও হলিডে হওয়া উচিত, এবং সিনেমাগুলিও সিনেমাগুলি প্রত্যাবর্তন করে।

এই পরীক্ষাগুলি আবার পাস করার জন্য আমাদের সূচি ম্যাপিং পরিবর্তন করতে হবে। এবার আমরা উভয় ক্ষেত্রেই একজন ইংরেজী বিশ্লেষক যুক্ত করব:

অসাধারণ চলচিত্র
# ইলাস্টিক অনুসন্ধান সূচী সেটিং সূচক: {সংখ্যা_ উপরে_শার্ডস: 1 ma ম্যাপিংগুলি গতিশীল করে: 'ভুল' সূচকগুলি তৈরি করুন: শিরোনাম, বিশ্লেষক: 'ইংরাজী' সূচকগুলি: ওভারভিউ, বিশ্লেষক: 'ইংলিশ' শেষের শেষে

তারা পরীক্ষায় উত্তীর্ণ হয়েছে কিনা তা দেখতে আবার আপনার পরীক্ষা চালান।

ইলাস্টিকসার্ক একটি খুব শক্তিশালী অনুসন্ধান প্ল্যাটফর্ম এবং আমরা আমাদের অনুসন্ধান পদ্ধতিতে অনেকগুলি বৈশিষ্ট্য যুক্ত করতে পারি। তবে এটি এই নিবন্ধের আওতার বাইরে। সুতরাং আমরা এখানে থামতে যাচ্ছি এবং JSON API এর নিয়ামক অংশটি তৈরি করব যা অনুসন্ধান পদ্ধতিটি অ্যাক্সেস করতে ব্যবহৃত হবে।

4. এপিআই শেষ পয়েন্ট ব্রাউজ করুন

আমরা তৈরি অনুসন্ধান এপিআইয়ের উচিত ব্যবহারকারীদের চলচ্চিত্রের টেবিলটিতে একটি সম্পূর্ণ পাঠ্য অনুসন্ধান করার অনুমতি দেওয়া উচিত। আমাদের এপিআইয়ের একটি একক সমাপ্তি রয়েছে যা নীচে বর্ণিত:

ইউআরএল: জিইটি / এপিআই / ভি 1 / চলচ্চিত্রগুলি
প্যারাম: * কি = [স্ট্রিং] প্রয়োজনীয়
উদাহরণ ইউআরএল: জিইটি / এপিআই / ভি 1 / চলচ্চিত্রগুলি? প্রশ্ন = রোমা
উদাহরণ প্রতিক্রিয়া: [ind "_আইডেক্স": "সিনেমা", "_ টাইপ": "সিনেমা", "_ আইডি": "95088", "_ স্কোর": 11.549209, "_ উত্স": {"আইডি": 95088, " শিরোনাম ":" রোমা "," ওভারভিউ ":" একজন বিখ্যাত নাগরিকের চোখের মধ্য দিয়ে রোমের একটি কার্যত কর্মহীন, রঙিন, ছাপযুক্ত চিত্র। "," চিত্র_আরল ":" https://image.tmdb.org/t/p/ w300 / rqK75R3tTz2iWU0AQ6tLz3KMOU1.jpg "," ভোট_প্রেজ ": 6.6," তৈরি_আট ":" 2018-04-14T10: 30: 49.110Z "," আপডেট_ট্যাট ":" 2018-04-14T10: 30: 49.110Z ".., .. ।]

এখানে আমরা কয়েকটি RESTful API নকশা সেরা অনুশীলনগুলি ব্যবহার করে আমাদের শেষ পয়েন্টটি সংজ্ঞায়িত করি:

  1. ইউআরএলটি অবজেক্ট বা সংস্থানটি এনকোড করতে হবে, যখন করা পদক্ষেপটি HTTP পদ্ধতি দ্বারা এনকোড করা উচিত। এই ক্ষেত্রে, উত্স হল চলচ্চিত্রগুলি (সংগ্রহ) এবং আমরা এইচটিটিপি জিইটি পদ্ধতি ব্যবহার করি (যেহেতু আমরা সংস্থান থেকে কোন প্রভাব না ফেলেই উত্স থেকে ডেটা অনুরোধ করছি)। এই ডেটা কীভাবে পুনরুদ্ধার করা উচিত তা আরও সংজ্ঞায়িত করতে আমরা URL প্যারামিটার ব্যবহার করব। এই উদাহরণে q = [স্ট্রিং], যা একটি অনুসন্ধান কোয়েরি নির্দিষ্ট করে। আরএসটিফুল এপিআইগুলি ডিজাইন করার বিষয়ে আরও তথ্যের জন্য, মহেশ হালদারের নিবন্ধটি দেখুন, আরএসটিফুল এপিআই ডিজাইনের গাইডলাইন - সেরা অভ্যাস।
  2. আমরা আমাদের এন্ডপয়েন্ট ইউআরএলটিতে ভি 1 যুক্ত করে আমাদের এপিআইতে সংস্করণ যোগ করি। আপনার এপিআই এর সংস্করণ করা খুব গুরুত্বপূর্ণ কারণ এটি আপনাকে নতুন কার্যকারিতা প্রবর্তন করতে দেয় যা আপনার API এর পূর্ববর্তী সংস্করণগুলির জন্য ডিজাইন করা কোনও ক্লায়েন্টকে না ভেঙে পূর্বের প্রকাশের সাথে সঙ্গতিপূর্ণ।

ঠিক আছে. এর বাস্তবায়ন দিয়ে শুরু করা যাক।

সর্বদা হিসাবে, আমরা ব্যর্থ পরীক্ষা দিয়ে শুরু করি। স্পেসিফিকেশন ফোল্ডারের মধ্যে আমরা ফোল্ডার স্ট্রাকচার তৈরি করি যা আমাদের এপিআই এর শেষ পয়েন্ট ইউআরএল কাঠামোটি আয়না করে। এর অর্থ কন্ট্রোলার → API → v1 → চলচ্চিত্র_spec.rb

আপনি নিজে থেকে বা আপনার টার্মিনাল থেকে এটি করতে পারেন:

এমকেডির-পি স্পেক / নিয়ন্ত্রক / এপিআই / ভি 1 এবং& স্পর্শ স্পেক / নিয়ন্ত্রক / এপিআই / ভি 1 / চলচ্চিত্র_স্পেক.আরবি

আমরা এখানে যে পরীক্ষাগুলি লিখতে চলেছি তা হ'ল নিয়ন্ত্রক পরীক্ষা। আপনাকে মডেলটিতে সংজ্ঞায়িত অনুসন্ধান যুক্তি পরীক্ষা করার দরকার নেই। পরিবর্তে, আমরা তিনটি জিনিস পরীক্ষা করতে যাচ্ছি:

  1. / এপিআই / ভি 1 / মুভিগুলিতে জিইটি অনুরোধ? প্রশ্ন = [স্ট্রিং] মুভি.সার্চকে [স্ট্রিং] পরামিতি হিসাবে কল করে
  2. মুভি.সার্ক থেকে আউটপুটটি JSON ফর্ম্যাটে ফিরে আসবে
  3. একটি সাফল্যের স্থিতি ফিরে আসে
একটি নিয়ামক পরীক্ষা নিয়ন্ত্রকের আচরণ পরীক্ষা করা উচিত। মডেলটিতে সমস্যার কারণে একটি নিয়ামক পরীক্ষা ব্যর্থ হওয়া উচিত নয়।
(রেসিপি 20 - রেল 4 টি টেস্টের রেসিপি। নোয়েল র্যাপিন)

এর কোড এ রূপান্তর করা যাক। স্পেক / নিয়ন্ত্রক / এপিআই / ভি 1 / চলচ্চিত্র_স্পেক.আরবিতে নিম্নলিখিত কোড যুক্ত করুন:

# স্পেস / কন্ট্রোলার / এপিআই / ভি 1 / চলচ্চিত্র_স্পেক.আরবি দরকার 'রেলস হেল্পার' আরএসপেক.ডেসক্রিপ্ট করুন অপি :: ভি 1 :: মুভিজ কনট্রোলার, প্রবেশ করুন :: অনুরোধ করুন # মুভি শিরোনাম বর্ণনা সহ একটি চলচ্চিত্র অনুসন্ধান করুন "জিইটি / এপিআই / v1 / চলচ্চিত্র? q = "চলুন (: শিরোনাম) {" ফিল্মের শিরোনাম "} চলুন (: url) {" / এপিআই / ভি 1 / চলচ্চিত্রগুলি? q = # {শিরোনাম} "}
এটি "সঠিক পরামিতিগুলির সাথে মুভি.সর্চকে কল করে" প্রত্যাশা (সিনেমা) receive
এটি "মুভি.সন্ধান" এর আউটপুট প্রদান করে (মুভি) অনুমতি দেয়। (প্রাপ্তি: অনুসন্ধান) .আর_প্রসূত ({}) ইউআরএল প্রত্যাশা পান (প্রতিক্রিয়া.বডি)। টু একা ({}। টো_জসন) শেষ
একটি সাফল্যের স্থিতি ফিরে (ফিল্ম) অনুমতি দেয় receive গ্রহণ (: অনুসন্ধান) পেতে (শিরোনাম) সাথে url অপেক্ষা (উত্তর) পান। সাফল্য শেষ শেষ হতে

পরীক্ষাটি অবিলম্বে ব্যর্থ হয় কারণ অপি :: ভি 1 :: মুভিজমালক সংজ্ঞায়িত হয়নি। আগের মতো ফোল্ডার স্ট্রাকচার তৈরি করুন এবং মুভি কন্ট্রোলার যুক্ত করুন।

এমকেডির-পি অ্যাপ্লিকেশন / নিয়ন্ত্রক / এপিআই / ভি 1 && টাচ অ্যাপ / নিয়ন্ত্রক / এপিআই / ভি 1 / চলচ্চিত্র_কন্ট্রোলআরআরবি

এখন অ্যাপ / কন্ট্রোলার / এপিআই / ভি 1 / সিনেমা_কন্ট্রোল.আরবিতে নিম্নলিখিত কোড যুক্ত করুন:

# অ্যাপ / কন্ট্রোলার / এপিআই / ভি 1 / চলচ্চিত্র_কন্ট্রোলআরআরবি মডিউল এপি মডিউল ভি 1 ক্লাস মুভিজগুলি নিয়ন্ত্রণকারী

আমাদের পরীক্ষা নেওয়ার সময় এটি ব্যর্থ হয় see

আমাদের এখনও শেষের পয়েন্টের জন্য একটি রুট যুক্ত করার কারণে সমস্ত পরীক্ষা ব্যর্থ হয়। কনফিগার / রুট.আরবিতে নিম্নলিখিত কোড যুক্ত করুন:

# কনফিগারেশন / রুট.আরবি রেইলস.অ্যাপ্লিকেশন.আরওয়েটস.ড্রে ডু নেমস্পেস: এপিআই ডোম নেমস্পেস: ভি 1 ডু রিসোর্স: সিনেমা, কেবল: [: সূচি] শেষের শেষ

আপনার পরীক্ষাগুলি আবার চালান এবং দেখুন কী ঘটে।

প্রথম ত্রুটিটি হ'ল আমাদের কন্ট্রোলারে মুভি.সর্চকে কল করা দরকার। দ্বিতীয়টি উত্তর সম্পর্কে অভিযোগ করে। চলুন মুভিজ_কন্ট্রোলারে অনুপস্থিত কোড যুক্ত করুন:

# অ্যাপ / কন্ট্রোলার / এপিআই / ভি 1 / চলচ্চিত্র_কন্ট্রোলআরআরবি মডিউল এপি মডিউল ভি 1 ক্লাস মুভিজগুলি নিয়ন্ত্রণকারী

পরীক্ষা চালান এবং দেখুন আমাদের সম্পন্ন হয়েছে কিনা।

হা. এখানেই শেষ. আমরা একটি খুব সাধারণ ব্যাকএন্ড অ্যাপ্লিকেশন শেষ করেছি যা ব্যবহারকারীদের এপিআইয়ের মাধ্যমে কোনও মডেল ব্রাউজ করতে দেয়।

আপনি আমার গিটহাব রেপোতে এখানে পুরো কোডটি পেতে পারেন। রেলস ডিবি: বীজ চালিয়ে আপনি কিছু মুভি দিয়ে আপনার চলচ্চিত্রের টেবিলটি তৈরি করতে পারেন যাতে আপনি অ্যাপ্লিকেশনটি কার্যত দেখতে পাচ্ছেন। এটি কেগল থেকে ডাউনলোড করা একটি ডেটাসেট থেকে প্রায় 45,000 চলচ্চিত্র আমদানি করবে। আরও তথ্যের জন্য দয়া করে Readme ফাইলটি দেখুন।

আপনি যদি এই নিবন্ধটি উপভোগ করেছেন তবে এই পৃষ্ঠার নীচে গসিপ আইকনটি ক্লিক করে এটির প্রস্তাব দিন যাতে আরও লোক এটি মিডিয়ামে দেখতে পারে।