۶ دیدگاه نظر نازنین کریمی مقدم
Elasticsearch چیست؟
Elasticsearch چیست؟

در دنیای فناوری کنونی، هر روز حجم زیادی از داده به میزان تقریبی ۲.۵ کوینتیلیون (Quintillion) بایت (چیزی حدود 2.5 میلیارد میلیارد بایت) تولید می‌شود. این اطلاعات به طور عمده از منابع مختلف، به عنوان مثال، سایت‌های ارتباط جمعی، سایت‌های اشتراک ویدیو و رسانه برای سازمان‌های بزرگ در مقیاس بزرگ به‌دست می‌آید. این داده‌ها به‌عنوان اقیانوس داده یا به طور کلی‌تر به‌عنوان داده‌های بزرگ (Big Data) نامیده می‌شوند. بخش قابل توجهی از این داده‌ها غیرساختاریافته (unstructured) و پراکنده هستند و فرد برای درک آن به ابزار تحلیلی نیاز دارد. ابزارهای تحلیلی زیادی در بازار وجود دارد که با استفاده از آن می‌توان به بررسی، ثبت، تحلیل و پردازش این داده‌ها اشاره کرد. یکی از پرکاربردترین این ابزارها، Elasticsearch است. لذا می‌خواهیم در این مقاله در مورد اینکه Elasticsearch چیست؟ صحبت کنیم.

Elasticsearch چیست؟

Elasticsearch محصول شرکتی به نام الاستیک (Elastic) است که در سال ۲۰۱۲ بنیان گذاشته شد. Elasticsearch یک موتور جستجوی متن باز با تجزیه و تحلیل کامل است که به زبان جاوا توسعه یافته است. داده‌های غیرساختاریافته را از منابع مختلف می‌گیرد و آن را در یک فرمت پیچیده ذخیره می‌کند که برای جستجوی متنی بسیار بهینه است. Elasticsearch از Lucene Apache در هسته‌ی خود برای نمایه‌سازی و جستجو استفاده می‌کند. Lucene کتابخانه‌ای است که کار کردن با آن واقعا پیچیده است؛ اما لازم نیست نگران آن بود چرا که Elasticsearch تمام پیچیدگی‌ها را با فراهم کردن قابلیت استفاده از API از بین می‌برد. API به شکل API RESTful HTTP است که از JSON به عنوان فرمت تبادل داده استفاده می‌کند؛ در نتیجه با استفاده از Elasticsearch می‌توان حجم زیادی از داده‌ها را به روش سریع و کارآمد ذخیره و تحلیل کرد. این امر به خصوص در هنگام برخورد با داده‌های نیمه ساختاریافته‌ی زبان طبیعی بسیار مفید است.

Elasticsearch در کجا استفاده می‌شود؟

مقیاس پذیری (scalability) و سرعت Elasticsearch بالاست و می‌توان از آن برای موارد زیر استفاده کرد:

  • جستجوی برنامه

  • جستجوی وب سایت

  • جستجوی سازمانی

  • تحلیل و تجزیه‌ی اطلاعات ورودی

  • بررسی عملکرد برنامه

  • آنالیز و تجسم داده‌ها

  • تجزیه و تحلیل امنیتی

  • تجزیه و تحلیل تجاری

مفاهیم مورد استفاده‌ی Elasticsearch

برای آشنایی و درک بهتر اینکه Elasticsearch چیست؟ مفاهیمی وجود دارند که باید با آن‌ها آشنا شویم:

elasticsearch01

تقریبا بلادرنگ (Near Real-Time)

Elasticsearch یک سکوی جستجوی بلادرنگ است؛ به این معنی است که می‌تواند به طور پیوسته یک وضعیت جدید از اسناد قابل جستجو را برنامه‌ریزی کند. نرخ پیش‌فرض، هر وضعیت در ثانیه است. بنابراین میزان زمان از لحظه‌ی جستجوی سند توسط کاربر تا لحظه‌ی اعلام نتایج کم و ناچیز می‌باشد.

شاخص (Index)

Elasticsearch مجموعه‌ای از اسناد است که دارای ویژگی‌های مشابهی هستند. این داده‌ها با استفاده از دستورات SQL در یک یا چند شاخص ذخیره می‌شوند و از شاخص‌ها برای نگهداری و خواندن اسناد از آن استفاده می‌شود. در Elasticsearch، یک شاخص با نامی منحصر به فرد شناسایی می‌شود و باید تمام حروفش کوچک باشد. سپس از این نام برای اشاره به یک شاخص خاص در هنگام انجام فعالیت‌های مختلف بر روی اسناد موجود استفاده می‌شود.

سند (Document)

در Elasticsearch، یک سند، واحد اصلی اطلاعاتی است که می‌توان شاخص کرد. این اسناد شامل فیلدهای مختلفی هستند و هر یک از این فیلدها با نام خود شناسایی شده‌اند و می‌توانند حاوی یک یا چند مقدار باشند. همچنین اسناد کاملا رایگان هستند و می‌توان چند سند در یک شاخص ذخیره کرد.

نوع (Type)

در Elasticsearch، یک نوع برای اسناد متشکل از مجموعه‌ا‌ی از فیلدها تعریف می‌شود. نوع سند توسط کاربر تعریف شده و همچنین می‌توان بیش از یک نوع را در یک شاخص مشخص کرد.

گره (Node)

گره به یک نمونه‌ از سرور Elasticsearch گفته می‌شود که داده‌ها را ذخیره می‌کند. یک گره دارای نام است و با آن شناسایی می‌شود. به طور پیش‌فرض در زمان شروع، یک شناسه‌ی منحصر به فرد تصادفی به گره تخصیص داده می‌شود. این نام برای اهداف اجرایی مورد استفاده قرار می‌گیرد.

خوشه (Cluster)

یک خوشه مجموعه‌ای از یک یا چند گره یا همان سرور است که با هم کار می‌کنند. خوشه تمامی داده‌ها را نگه می‌دارد و امکان جستجوی آسان را در تمام گره‌ها فراهم می‌کند و موجب کنترل آسان اطلاعات برای هر گره می‌شود. همانند یک گره، یک خوشه نیز با نام منحصر به فرد مشخص می‌شود و به طور پیش‌فرض، نامش "elasticsearch" است. برای اتصال چند گره به یک خوشه از نام خوشه استفاده می‌شود و به همین دلیل است که نام خوشه بسیار مهم است.

Shards

ذخیره‌ی حجم زیادی از اطلاعات می‌تواند فراتر از توانایی‌های یک سرور واحد باشد. برای حل این مشکل، Elasticsearch اجازه می‌دهد تا شاخص را به چند بخش تقسیم کرد که shards نامیده می‌شوند. تعداد بخش‌های مورد نیاز می‌تواند در حین ایجاد یک شاخص مشخص شود. هر shard برای هر شاخص کاملا مستقل است و می‌تواند میزبان هر گره‌ درون خوشه باشد.

Replicas

برای جلوگیری از هر نوع خطای تصادفی، مانند اشتراک‌گذاری یک گره‌ی آفلاین، Elasticsearch مفهومی شبیه به کپی را ارائه می‌دهد. Replicas در اصل فقط یک کپی دیگر از یک تکه است و می‌تواند برای پرس‌وجوها به عنوان تکه‌‌ی اصلی مورد استفاده قرار گیرد.

سازوکار Elasticsearch چیست؟

Elasticsearch مجموعه‌ای از اسناد است که با هم مرتبط هستند و داده‌ها را به عنوان اسناد JSON ذخیره می‌کند. هر سند مجموعه‌ای از کلیدها را با مقادیر متناظر خود مانند رشته‌ها، اعداد، Booleans، تاریخ‌ها، آرایه‌های حاوی مقادیر یا انواع دیگر داده‌ها مرتبط می‌کند.

Elasticsearch همچنین از یک ساختار داده با نام شاخص معکوس استفاده می‌کند که برای جستجوهای کامل متن (full text) طراحی شده‌است. یک شاخص معکوس، هر کلمه‌ی منحصر به فرد که در هر سند نمایان می‌شود را لیست می‌کند و تمام اسنادی را که آن کلمه در آن رخ می‌دهد را مشخص می‌کند.

در طول فرآیند شاخص‌گذاری، Elasticsearch اسناد را ذخیره کرده و یک شاخص معکوس ایجاد می‌کند تا داده‌ها در زمان واقعی قابل جستجو باشند. نمایه‌سازی با API آغاز می‌شود که از طریق آن می‌توان یک سند JSON را در یک شاخص مشخص بروزرسانی یا اضافه کرد. API‌های مطرح عبارتند از:

  • Index API: برای ثبت شاخص استفاده می‌شود.

  • Get API: برای بازیابی سند استفاده می‌شود.

  • API Searh: برای ارسال درخواست و دریافت نتیجه استفاده می‌شود.

  • Put API: برای انتخاب گزینه‌های پیش‌فرض و تعریف نقشه استفاده‌ می‌شود.

elasticsearch02

همچنین می‌توان APIهای دیگری را براساس نیاز بررسی و ایجاد کرد؛ چراکه پروژه‌های دنیای واقعی نیازمند پرس‌وجوهای متفاوت در زمینه‌های گوناگون با اعمال شرایط مخصوص به خود هستند.

تمام این پیچیدگی را می‌توان از طریق پرس‌وجوها آسان کرد. DSL پرس‌وجویی قدرتمند است و برای رسیدگی به پیچیدگی از طریق یک پرس‌وجو طراحی شده‌ است. API‌های Elasticsearch به طور مستقیم با lucene ارتباط دارند و از همین نام برای کار با lucene استفاده می‌کنند. DSL نیز از Lucene TermQuery برای اجرا استفاده می‌کند.

مزایای استفاده از Elasticsearch چیست؟

استفاده از Elasticsearch دارای مزایای زیادی است؛ از این مزایا می‌توان به موارد زیر اشاره کرد:

  • مقیاس پذیری: یعنی با افزایش حجم داده‌ها، عملکرد همچنان بسیار ساده مانده و نتایج قابل‌اطمینان است. این یک ویژگی بسیار مهم است که به ساده‌سازی معماری‌های پیچیده و صرفه‌جویی در زمان در طول اجرای پروژه‌ها کمک می‌کند.

  • سرعت: Elasticsearch از شاخص‌گذاری معکوس استفاده می‌کند. همان‌طور که در بخش قبل آموختیم، شاخص‌گذاری معکوس یک روش مبتني بر کلمه است که براي جستجوی سريع اسناد شامل يک کلمه‌ی خاص به کار می‌رود. در نتیجه حتی زمانی هم که در مجموعه داده‌های بسیار بزرگ جستجو می‌کند، بسیار سریع است.

  • استفاده از API: Elasticsearch API‌های ساده RESTful را ارائه می‌دهد و از اسناد JSON، بدون الگو استفاده می‌کند که نمایه‌سازی، جستجو و پرس و جوی داده‌ها را بسیار آسان می‌سازد.

  • چندزبانه: یکی از ویژگی‌های Elasticsearch این است که چندزبانه است. این موتور از نوشتارهای گسترده‌ای در زبان‌های مختلف مانند عربی، برزیلی، چینی، انگلیسی، فرانسوی، کره‌ای و ... پشتیبانی می‌کند.

  • بهینه‌ بودن در کار با اسناد: Elasticsearch ماهیت پیچیده‌ی دنیای واقعی را به عنوان اسناد JSON ساختاربندی کرده و تمام مفاهیم را به طور پیش‌فرض در یک شاخص (index) جمع‌آوری می‌کند تا بتوان داده‌ها را جستجو کرد. از آنجا که هیچ ردیف و ستون داده‌ای وجود ندارد، می‌توان به راحتی جستجوی متن کامل را انجام داد.

  • تکمیل خودکار: Elasticsearch با پیش‌بینی کلمه (حتی اگر شامل تعداد بسیار کمی از کاراکترها باشد) ، تعامل انسان و رایانه را سرعت می‌بخشد.

  • شِمای رایگان: Elasticsearch با وجود اینکه اسناد JSON را می‌پذیرد، عاری از شِما است. در واقع Elasticsearch سعی می‌کند ساختار داده‌ها را شناسایی کند، داده‌ها را شاخص‌بندی کند و در نهایت بتواند داده‌ها را جستجو کند.

معایب Elasticsearch چیست؟

باید توجه داشت که هنگامی از Elasticsearch باید استفاده کرد که داده‌های مورد بررسی دارای ویژگی‌هایی باشند که بتوان از نقاط قوت Elasticsearch استفاده کرد. چرا‌ که اگر این‌گونه نباشد، نتیجه معکوس خواهد شد و آن جنبه‌های بیان شده به‌عنوان مزایا، تبدیل به معایب کار می‌شوند. با این حال Elasticsearch نیز خالی از عیب نیست. برخی از این معایب عبارتند از:

  • Elasticsearch از لحاظ مدیریت درخواست و پاسخ هنگام کار با سرویس‌ها، برخلاف برخی سیستم‌ها که در فرمت‌های CSV، XML و JSON هم کار می‌کنند، پشتیبانی چند زبانی ندارد.

  • Elasticsearch همچنین دارای مشکل split brain می‌باشد. این مشکل هنگامی به وجود می‌آید که برقراری ارتباط بین سرورها قطع می‌شود و نگهداری دو مجموعه‌ی داده‌ی مجزا که در یک موضوع همپوشانی دارند، دچار مشکل می‌شود.

  • اگر فرد به آن مسلط نباشد، استفاده از ابزارهایی مانند Algolia آسان نیست. البته همان‌طور که گفتیم، Elasticsearch روشی قدرتمندتر و انعطاف‌پذیرتر از حالت عادی است، اما باز هم یادگیری آن زمانبر است.

نصب Elasticsearch و شروع کار با آن

پیش‌تر گفتیم که Elasticsearch در جاوا توسعه یافته است؛ لذا در مرحله‌ی اول باید جدیدترین نسخه‌ی جاوا را نصب کنید و یا اگر جاوا نصب شده‌ باشد نسخه‌ی آن را با استفاده از دستور زبان جاوا در cmd چک کنید. البته توجه داشته باشید که کتابخانه‌های زیادی برای استفاده از Elasticsearch با سایر زبان‌های برنامه‌نویسی مانند .NET(C#)، پایتون، جاوا اسکریپت، PHP، روبی، پرل و ... گسترش یافته است.

در مرحله‌ی دوم باید به سایت Elasticsearch رفته و آن را دانلود کنید. فایل زیپ را از حالت فشرده خارج کرده، در سرور قرار دهید و با دابل کلیک در فایل .bat در مسیر  elasticsearch-x.y.z/bin آن را اجرا کنید.

elasticsearch03

در مرحله‌ی سوم منتظر بمانید تا شروع به‌کار کند. در مرورگر بنویسید: localhost:9200 یا 127.0.0.1:9200، چون به طور پیش فرض elasticsearch روی آی‌پی (IP) لوکال و پورت  9200 اجرا شده و قابل استفاده است.

elasticsearch04

اگر بتوانید پیغام مشخص‌شده در مرورگر را ببینید، به این معنی است که همه چیز صحیح است.  اگر در نصب سوال دارید یا خطایی گرفتید می‌توانید در بخش نظرات آن را درمیان بگذارید.

ابزارهای مرتبط با Elasticsearch چیست؟

شرکت الاستیک چند ابزار برای راحت‌تر کار کردن با Elasticsearch توصیه کرده است که عبارتند از:

  • Logstash: یکی از محصولات اصلی الاستیک است که برای جمع‌آوری و پردازش داده و ارسال آن به Elasticsearch استفاده می‌شود. Logstash یک خط لوله‌ی پردازش داده‌ی مبتنی بر سرور است که این امکان را می‌دهد که داده‌ها را از منابع چندگانه به طور همزمان جذب کرده و آنها را قبل از شاخص‌گذاری در Elasticsearch تبدیل نمود.

  • Kibana: یک ابزار تجسم و مدیریت برای Elasticsearch است که نمودار هیستوگرام، نمودار خط، نمودار دایره‌ای، و نقشه‌ها را فراهم می‌کند. Kibana همچنین شامل برنامه‌های پیشرفته‌ای می‌باشد که به کاربران اجازه می‌دهد تا به‌منظور تجسم بهتر داده‌های مکانی، اینفوگرافیک‌های پویا را به‌صورت سفارشی و براساس داده‌ها ایجاد کنند.

elasticsearch05

جمع بندی:

Elasticsearch یک موتور قوی و با امکانات بالا برای جستجو و تحلیل داده است. در مقاله‌ی  Elasticsearch چیست؟ ابتدا مروری بر اصطلاحات مرتبط داشتیم و سپس در مورد سازوکار Elasticsearch، مزایا و معایب آن و طریقه‌ی نصب صحبت کردیم. در پایان هم دو ابزار کاربردی که با Elasticsearch در تعامل هستند را معرفی کردیم. کتابخانه‌های زیادی برای کار با Elasticsearch توسعه یافته‌اند که بسته به نیاز و زبان برنامه‌نویسی می‌توانید از آن‌ها استفاده کنید. برای تمرین بیشتر و کار با Elasticsearch می‌توانید.

اگر به مباحث فریم ورک لاراول علاقه‌مند هستید پیشنهاد میکنیم در دوره آموزش لاراول سون لرن شرکت کنید.

 

۶ دیدگاه
ما همه سوالات و دیدگاه‌ها رو می‌خونیم و پاسخ میدیم
۲۳ مرداد ۱۴۰۱، ۰۴:۱۳

توضیحات بسیار جامع و کامل و قابل فهم بود. سپاس فراوان

۰۷ اردیبهشت ۱۴۰۱، ۰۵:۳۸

عالی

iliya ۰۴ اردیبهشت ۱۴۰۰، ۰۹:۴۹

بسیار عالی و کاربردی از آموزش خوبتون ممنونم❤

معین ۲۴ آبان ۱۳۹۹، ۱۲:۱۹

خیلی ممنون از مقالات با کیفیت بالا تون

پوریا ۱۶ اردیبهشت ۱۳۹۹، ۰۹:۳۰

ممون از تیم سون لرن بابته ارائه محتوای بسیار عالیشون .

نازنین کریمی مقدم ۱۷ اردیبهشت ۱۳۹۹، ۱۰:۲۲

سلام. ممنون که با ما همراه هستید.

  • Elasticsearch چیست؟
  • Elasticsearch در کجا استفاده می‌شود؟
  • مفاهیم مورد استفاده‌ی Elasticsearch
  • سازوکار Elasticsearch چیست؟
  • مزایای استفاده از Elasticsearch چیست؟
  • معایب Elasticsearch چیست؟
  • نصب Elasticsearch و شروع کار با آن
  • ابزارهای مرتبط با Elasticsearch چیست؟
اشتراک گذاری مقاله در :