Elasticsearch (اختیاری)
مقدمه
در این فاز با موتور جستجوی Elasticsearch و نحوهی کار کردن با آن آشنا میشوید.
Elasticsearch چیست؟
در سالهای اخیر با توجه به رشد روزافزون خدمات مبتنی بر نرمافزار و تولید مقادیر زیادی داده، امکان جستجو در این دادهها اهمیت فوقالعادهای پیدا کرده است. همچنین علاوه بر دادههایی که مربوط به فعالیت کاربران در بسترهای مجازی است، خود سیستمهای نرمافزاری مقادیر زیادی log تولید میکنند که امکان جستجو در آنها میتواند کار را برای مدیران سیستم و توسعهدهندگان بسیار سادهتر کند. د ر هر محصول نرمافزاری به احتمال قوی کاربر به امکان جستجو نیاز دارد که برای ایجاد این امکان میتوان از موتورهای جستجو استفاده کرد. محصولات متفاوتی در این حوزه وجود دارند که در حال حاضر معروفترین و محبوبترین آنها Elasticsearch نام دارد.
Elasticsearch یک موتور جستجوی Full-text است که به طور متنباز توسعه داده میشود. این محصول به کاربران این امکان را میدهد که در تعداد زیادی سند متنی جستجو کنند. این موتور جستجو توسط بسیاری از شرکتهای نرمافزاری دنیا مورد استفاده قرار گرفته است. همچنین در محبوبیت آن همین بس که در github بیش از 60هزار ستاره دریافت کرده است. این موتور جستجو کاربردهای فراوانی در حوزههای مختلف دارد که از این کاربردها میتوان به امکان ارائهی جستجو در محصولات نرمافزاری و جمعآوری و تحلیل logهای سیستمهای نرمافزاری اشاره کرد.
علاوه بر خود Elasticsearch چندین محصول دیگر به عنوان Elastic Stack نیز وجود دارند که از مهمترین آنها میتوان به Kibana، Logstash و APM اشاره کرد.
-
Kibana
این محصول امکان مدیریت کلاستر Elasticsearch و Visualize کردن دادهها در داشبوردها و نمودارهای مختلف را به مدیر سیستم میدهد.
-
Logstash
با این محصول میتوان Logهای سیستم را جمعآوری کرد که در ادامه بتوان راحتتر آنها را مورد تحلیل و بررسی قرار داد.
-
APM (Application Performance Monitoring)
این محصول به ایجادکنندگان نرمافزار این امکان را میدهد تا نرمافزار خود را از نظر کارایی مورد نظارت قرار دهند به این صورت که میتوانند زمانی که صرف هر یک از قسمتهای نرمافزار و یا فراخوانی هر یک از توابع شده است را اندازهگیری کنند و متوجه گلوگاههای سیستم شوند.
Elasticsearch کمی عمیقتر
برای آشنایی با موتور جستجوی Elasticsearch مطالعهی «What is Elasticsearch» مفید است.
شما در ابتدا، جستجو در اسناد متنی را به وسیلهی Inverted Index پیادهسازی کردید. موتور جستجوی Elasticsearch نیز قابلیتی مشابه پروژهی شما ارائه میدهد. این قابلیت شامل index کردن اسناد متنی و سپس جستجو در آنها میشود که البته امکانات بسیار پیشرفتهتری را نیز در بر دارد که در ادامه برخی از آنها را ذکر میکنیم:
امکانات معماری
توزیعشدگی
شما میتوانید Elasticsearch را روی چندین سرور نصب کنید و آنها را به یک دیگر متصل کنید و این سرورها با همکاری یکدیگر قدرت و سرعت بیشتری را در اختیار شما قرار دهند.
مقیاسپذیری
با افزودن تعداد سرورها میتوانید مقادیر بیشتری داده در Elasticsearch بریزید و کماکان سرعت بالای index کردن و جستجو حفظ شود.
توضیحات بیشتر را در Scalability and resilience: clusters, nodes, and shards مطالعه کنید.
امکانات کارکردی
Dynamic Mapping
سندی که میخواهید در Elasticsearch بریزید میتواند هر ساختاری داشته باشد و لازم نیست از قبل ساختار آن را در Elasticsearch تعیین کنید چرا که به طور خودکار آن را تشخیص میدهد و ساختار مناسب را تعریف میکند.
برای مطالعه بیشتر از Dynamic mapping استفاده کنید.
Normalization
Elasticsearch امکانات نرمالسازی متن پیشرفته از جمله Analyzerها و Tokenizerهای مختلفی دارد که کار کاربر را بسیار ساده میکند.
پشتیبانی از انواع مختلف داده
به غیر از مقادیر متنی میتوان دادههای عددی، تاریخی و یا مختصات مکانی و ... را در Elasticsearch ریخت و روی آنها جستجو کرد. برای مثال فقط در سندهای یک بازهی زمانی خاص و یا سندهای یک محدودهی جغرافیایی خاص جستجو کرد.
پشتیبانی از جستجوی Fuzzy و زیررشته
در بسیاری مواقع کاربران ممکن است مقداری از عبارت را به اشتباه تایپ کنند یا فقط زیررشتهای از یک عبارت را جستجو کنند. Elasticsearch از این نوع جستجوها نیز پشتیبانی میکند.