بعد از اینکه موفق شدیم Elasticsearch رو نصب کنیم، نیاز داریم تا اسنادمون رو در این موتور جستوجو ذخیره کنیم. Elasticsearch از ساختاری به اسم شاخص معکوس (Inverted index) برای ذخیرهسازی اسناد استفاده میکنه تا جستوجو با سرعت قابل قبولی انجام بگیره. فرض کنید از بین هزاران سند میخوایم سندهایی که حاوی عبارتی خاص هستند رو پیدا کنیم. ساده ترین کار اینه که تمام اسناد رو یکی یکی بازیابی کنیم و کلمه به کلمه اش رو بررسی کنیم و ببینیم آیا عبارت مورد نظر ما در این سند وجود داره یا نه؟ مسلما این راه بسیار زمانبر و کند خواهد بود. اینجاست که شاخص معکوس به کمک ما میاد. در این روش هنگام ذخیرهسازی هر سند، اون رو به کلمات تشکیلدهندهاش تجزیه میکنیم. سپس یک لیست مرتب شده از کلمات یکتای موجود در اسناد ایجاد میکنیم به صورتیکه هر کلمه به اسنادی که در اون رخ داده اشاره میکنه. فرض کنید اسناد زیر رو داریم:
سند 1: روباه قهوهای چابک از روی سگ تنبل پرید.
سند 2: روباههای قهوهای چابک در تابستان از روی سگهای تنبل پریدند.
اگر بخوایم اسناد مورد اشاره رو با ساختار شاخص معکوس ذخیرهسازی کنیم به جدول زیر میرسیم:
حالا برای جستوجوی یک عبارت مثل "روباه" کافیه سراغ سطر مورد نظر بریم و به سرعت اسنادی که این عبارت رو شامل میشن بازیابی میکنیم. البته ساختار شاخص معکوسی که Elasticsearch از اون استفاده میکنه بسیار پیچیده تره و من فقط خواستم یک دید کلی بهتون بدم.
برای ذخیره اسناد در Elasticsearch نیاز دارید تا یک درخواست از نوع PUT به URL ای با الگوی زیر ارسال کنید:
/name/type/id
به جای name نام ایندکس مورد نظر، به جای type نوع سند و به جای id هم مقدار شناسه سند رو قرار میدیم. لازم به ذکره که id در URL اختیاریه و اگر فقط نام ایندکس و نوع سند رو مشخص کنید Elasticsearch خودش یک مقدار یکتا رو برای id به صورت خودکار تولید میکنه. به طور مثال اگر من بخوام یک پست از ویرگول رو در Elasticsearch ذخیره کنم، URL من به این شکل خواهد بود:
/virgool/post/1
حالا کافیه در body درخواست، با فرمت JSON فیلدها و مقادیر سند مورد نظر خودم رو مشخص کنم. مثلا:
{ "id":1, "title":"پست ویرگول", "body":"این یک پست جدید در ویرگول است." , "likes":5, "comments":2 }
حالا اگه این درخواست رو در Postman برای Elasticsearch ارسال کنیم و جواب مانند تصویر زیر باشه به این معنیه که موفق شدیم اولین سند خودمون رو با موفقیت ذخیره کنیم :)