در دنیای فناوری کنونی، هر روز حجم زیادی از داده به میزان تقریبی ۲.۵ کوینتیلیون (Quintillion) بایت (چیزی حدود 2.5 میلیارد میلیارد بایت) تولید میشود. این اطلاعات به طور عمده از منابع مختلف، به عنوان مثال، سایتهای ارتباط جمعی، سایتهای اشتراک ویدیو و رسانه برای سازمانهای بزرگ در مقیاس بزرگ بهدست میآید. این دادهها بهعنوان اقیانوس داده یا به طور کلیتر بهعنوان دادههای بزرگ (Big Data) نامیده میشوند. بخش قابل توجهی از این دادهها غیرساختاریافته (unstructured) و پراکنده هستند و فرد برای درک آن به ابزار تحلیلی نیاز دارد. ابزارهای تحلیلی زیادی در بازار وجود دارد که با استفاده از آن میتوان به بررسی، ثبت، تحلیل و پردازش این دادهها اشاره کرد. یکی از پرکاربردترین این ابزارها، Elasticsearch است. لذا میخواهیم در این مقاله در مورد اینکه Elasticsearch چیست؟ صحبت کنیم.
Elasticsearch محصول شرکتی به نام الاستیک (Elastic) است که در سال ۲۰۱۲ بنیان گذاشته شد. Elasticsearch یک موتور جستجوی متن باز با تجزیه و تحلیل کامل است که به زبان جاوا توسعه یافته است. دادههای غیرساختاریافته را از منابع مختلف میگیرد و آن را در یک فرمت پیچیده ذخیره میکند که برای جستجوی متنی بسیار بهینه است. Elasticsearch از Lucene Apache در هستهی خود برای نمایهسازی و جستجو استفاده میکند. Lucene کتابخانهای است که کار کردن با آن واقعا پیچیده است؛ اما لازم نیست نگران آن بود چرا که Elasticsearch تمام پیچیدگیها را با فراهم کردن قابلیت استفاده از API از بین میبرد. API به شکل API RESTful HTTP است که از JSON به عنوان فرمت تبادل داده استفاده میکند؛ در نتیجه با استفاده از Elasticsearch میتوان حجم زیادی از دادهها را به روش سریع و کارآمد ذخیره و تحلیل کرد. این امر به خصوص در هنگام برخورد با دادههای نیمه ساختاریافتهی زبان طبیعی بسیار مفید است.
مقیاس پذیری (scalability) و سرعت Elasticsearch بالاست و میتوان از آن برای موارد زیر استفاده کرد:
برای آشنایی و درک بهتر اینکه Elasticsearch چیست؟ مفاهیمی وجود دارند که باید با آنها آشنا شویم:
Elasticsearch یک سکوی جستجوی بلادرنگ است؛ به این معنی است که میتواند به طور پیوسته یک وضعیت جدید از اسناد قابل جستجو را برنامهریزی کند. نرخ پیشفرض، هر وضعیت در ثانیه است. بنابراین میزان زمان از لحظهی جستجوی سند توسط کاربر تا لحظهی اعلام نتایج کم و ناچیز میباشد.
Elasticsearch مجموعهای از اسناد است که دارای ویژگیهای مشابهی هستند. این دادهها با استفاده از دستورات SQL در یک یا چند شاخص ذخیره میشوند و از شاخصها برای نگهداری و خواندن اسناد از آن استفاده میشود. در Elasticsearch، یک شاخص با نامی منحصر به فرد شناسایی میشود و باید تمام حروفش کوچک باشد. سپس از این نام برای اشاره به یک شاخص خاص در هنگام انجام فعالیتهای مختلف بر روی اسناد موجود استفاده میشود.
در Elasticsearch، یک سند، واحد اصلی اطلاعاتی است که میتوان شاخص کرد. این اسناد شامل فیلدهای مختلفی هستند و هر یک از این فیلدها با نام خود شناسایی شدهاند و میتوانند حاوی یک یا چند مقدار باشند. همچنین اسناد کاملا رایگان هستند و میتوان چند سند در یک شاخص ذخیره کرد.
در Elasticsearch، یک نوع برای اسناد متشکل از مجموعهای از فیلدها تعریف میشود. نوع سند توسط کاربر تعریف شده و همچنین میتوان بیش از یک نوع را در یک شاخص مشخص کرد.
گره به یک نمونه از سرور Elasticsearch گفته میشود که دادهها را ذخیره میکند. یک گره دارای نام است و با آن شناسایی میشود. به طور پیشفرض در زمان شروع، یک شناسهی منحصر به فرد تصادفی به گره تخصیص داده میشود. این نام برای اهداف اجرایی مورد استفاده قرار میگیرد.
یک خوشه مجموعهای از یک یا چند گره یا همان سرور است که با هم کار میکنند. خوشه تمامی دادهها را نگه میدارد و امکان جستجوی آسان را در تمام گرهها فراهم میکند و موجب کنترل آسان اطلاعات برای هر گره میشود. همانند یک گره، یک خوشه نیز با نام منحصر به فرد مشخص میشود و به طور پیشفرض، نامش “elasticsearch” است. برای اتصال چند گره به یک خوشه از نام خوشه استفاده میشود و به همین دلیل است که نام خوشه بسیار مهم است.
ذخیرهی حجم زیادی از اطلاعات میتواند فراتر از تواناییهای یک سرور واحد باشد. برای حل این مشکل، Elasticsearch اجازه میدهد تا شاخص را به چند بخش تقسیم کرد که shards نامیده میشوند. تعداد بخشهای مورد نیاز میتواند در حین ایجاد یک شاخص مشخص شود. هر shard برای هر شاخص کاملا مستقل است و میتواند میزبان هر گره درون خوشه باشد.
برای جلوگیری از هر نوع خطای تصادفی، مانند اشتراکگذاری یک گرهی آفلاین، Elasticsearch مفهومی شبیه به کپی را ارائه میدهد. Replicas در اصل فقط یک کپی دیگر از یک تکه است و میتواند برای پرسوجوها به عنوان تکهی اصلی مورد استفاده قرار گیرد.
Elasticsearch مجموعهای از اسناد است که با هم مرتبط هستند و دادهها را به عنوان اسناد JSON ذخیره میکند. هر سند مجموعهای از کلیدها را با مقادیر متناظر خود مانند رشتهها، اعداد، Booleans، تاریخها، آرایههای حاوی مقادیر یا انواع دیگر دادهها مرتبط میکند.
Elasticsearch همچنین از یک ساختار داده با نام شاخص معکوس استفاده میکند که برای جستجوهای کامل متن (full text) طراحی شدهاست. یک شاخص معکوس، هر کلمهی منحصر به فرد که در هر سند نمایان میشود را لیست میکند و تمام اسنادی را که آن کلمه در آن رخ میدهد را مشخص میکند.
در طول فرآیند شاخصگذاری، Elasticsearch اسناد را ذخیره کرده و یک شاخص معکوس ایجاد میکند تا دادهها در زمان واقعی قابل جستجو باشند. نمایهسازی با API آغاز میشود که از طریق آن میتوان یک سند JSON را در یک شاخص مشخص بروزرسانی یا اضافه کرد. APIهای مطرح عبارتند از:
همچنین میتوان APIهای دیگری را براساس نیاز بررسی و ایجاد کرد؛ چراکه پروژههای دنیای واقعی نیازمند پرسوجوهای متفاوت در زمینههای گوناگون با اعمال شرایط مخصوص به خود هستند.
تمام این پیچیدگی را میتوان از طریق پرسوجوها آسان کرد. DSL پرسوجویی قدرتمند است و برای رسیدگی به پیچیدگی از طریق یک پرسوجو طراحی شده است. APIهای Elasticsearch به طور مستقیم با lucene ارتباط دارند و از همین نام برای کار با lucene استفاده میکنند. DSL نیز از Lucene TermQuery برای اجرا استفاده میکند.
استفاده از Elasticsearch دارای مزایای زیادی است؛ از این مزایا میتوان به موارد زیر اشاره کرد:
باید توجه داشت که هنگامی از Elasticsearch باید استفاده کرد که دادههای مورد بررسی دارای ویژگیهایی باشند که بتوان از نقاط قوت Elasticsearch استفاده کرد. چرا که اگر اینگونه نباشد، نتیجه معکوس خواهد شد و آن جنبههای بیان شده بهعنوان مزایا، تبدیل به معایب کار میشوند. با این حال Elasticsearch نیز خالی از عیب نیست. برخی از این معایب عبارتند از:
پیشتر گفتیم که Elasticsearch در جاوا توسعه یافته است؛ لذا در مرحلهی اول باید جدیدترین نسخهی جاوا را نصب کنید و یا اگر جاوا نصب شده باشد نسخهی آن را با استفاده از دستور زبان جاوا در cmd چک کنید. البته توجه داشته باشید که کتابخانههای زیادی برای استفاده از Elasticsearch با سایر زبانهای برنامهنویسی مانند .NET(C#)، پایتون، جاوا اسکریپت، PHP، روبی، پرل و … گسترش یافته است.
در مرحلهی دوم باید به سایت Elasticsearch رفته و آن را دانلود کنید. فایل زیپ را از حالت فشرده خارج کرده، در سرور قرار دهید و با دابل کلیک در فایل .bat در مسیر elasticsearch-x.y.z/bin آن را اجرا کنید.
در مرحلهی سوم منتظر بمانید تا شروع بهکار کند. در مرورگر بنویسید: localhost:9200 یا 127.0.0.1:9200، چون به طور پیش فرض elasticsearch روی آیپی (IP) لوکال و پورت 9200 اجرا شده و قابل استفاده است.
اگر بتوانید پیغام مشخصشده در مرورگر را ببینید، به این معنی است که همه چیز صحیح است. اگر در نصب سوال دارید یا خطایی گرفتید میتوانید در بخش نظرات آن را درمیان بگذارید.
شرکت الاستیک چند ابزار برای راحتتر کار کردن با Elasticsearch توصیه کرده است که عبارتند از:
جمع بندی:
Elasticsearch یک موتور قوی و با امکانات بالا برای جستجو و تحلیل داده است. در مقالهی Elasticsearch چیست؟ ابتدا مروری بر اصطلاحات مرتبط داشتیم و سپس در مورد سازوکار Elasticsearch، مزایا و معایب آن و طریقهی نصب صحبت کردیم. در پایان هم دو ابزار کاربردی که با Elasticsearch در تعامل هستند را معرفی کردیم. کتابخانههای زیادی برای کار با Elasticsearch توسعه یافتهاند که بسته به نیاز و زبان برنامهنویسی میتوانید از آنها استفاده کنید. برای تمرین بیشتر و کار با Elasticsearch میتوانید.
اگر به مباحث فریم ورک لاراول علاقهمند هستید پیشنهاد میکنیم در دوره آموزش لاراول سون لرن شرکت کنید.
سپاس فراوان