الستیک سرچ (Elastic Search) یک موتور جستجو و تجزیه و تحلیل توزیعشده و متنباز است که میتواند برای موارد مختلفی مانند ثبت گزارش، مانیتورینگ، امنیت و موارد دیگر کاربرد داشته باشد. این برنامه بر پایه یک کتابخانه جستجوی متن محبوب و قدرتمند به اسم Apache Lucene، بنا شده است و یک رابط HTTP RESTful برای تعامل با داکیومنتهای JSON ارائه میدهد. در این مقاله نحوه عملکرد، مزایا و کاربردهای استفاده از الستیک سرچ را بررسی میکنیم.
الستیک سرچ چیست؟
ابتدا تعریف میکنیم که Elasticsearch چیست؟ الستیک سرچ یک موتور جستجو است که امکان اجرا در فضای ابری هم دارد و این امکان را به شما میدهد تا حجم عظیمی از دادهها را تقریبا به صورت آنی ذخیره، جستجو، تجزیه و تحلیل کنید. این برنامه به گونهای طراحی شده تا کاملا مقیاسپذیر، انعطافپذیر و مقاوم باشد و بتواند از دادههای ساختاریافته، غیرساختار یافته، مکانی، متریک و متنی پشتیبانی کند. اما سازوکار عملکرد Elasticsearch چیست؟
الستیک سرچ با ایندکس کردن دادههای شما در شاخصهای معکوس کار میکند. شاخصهای معکوس، ساختارهای دادهای هستند که Elasticsearch برای جستجوی سریع دادهها از آنها استفاده میکند. در واقع، این شاخصها به Elasticsearch اجازه میدهند تا دادهها را به سرعت جستجو و حجم عظیمی از آنها را مقیاسبندی کند. الستیک سرچ همچنین از Sharding و Replication نیز پشتیبانی میکند.
Sharding و Replication دو تکنیک مهم هستند که در Elasticsearch برای بهبود عملکرد، تحمل خطا و مقیاسپذیری استفاده میشوند. Sharding دادهها را به قطعات کوچکتری تقسیم میکند که به آنه “Shard” کفته میشود. این کار باعث میشود که جستجوها و سایر عملیاتها بتوانند به صورت موازی روی چندین گره (Node) مختلف در کلاستر (Cluster) اجرا شوند و در نتیجه، عملکرد کلی بهبود یابد. Replication نیز از هر Shard چندین نسخه در گرههای مختلف کلاستر ایجاد میکند. اگر یک گره از کار بیفتد، دادههای آن در یک نسخه از گره دیگر در دسترس قرار خواهد گرفت. این کار باعث میشود که سیستم در برابر خرابی گرهها مقاوم باشد.
الستیک سرچ یک رابط برنامهنویسی (API) ساده و قدرتمند در اختیار شما قرار میدهد که با استفاده از آن میتوانید انواع زیادی از کوئریها مانند کوئریهای اصطلاحی، تطبیقی، بازهای، بولی و غیره را اجرا و حتی آنها را با هم ترکیب کنید. به این ترتیب، نتایج دقیقی به دست میآورید. همچنین، میتوانید از تجمیعها برای انجام محاسبات و آمارهای پیچیده روی دادههای خود مانند مجموع، میانگین، شمارش، هیستوگرام و غیره استفاده کنید.
Elasticsearch از اسکریپتنویسی نیز پشتیبانی میکند، که به شما امکان میدهد رفتار کوئریها و تجمیعها را با استفاده از یک زبان برنامهنویسی به نام Painless سفارشی کنید. علاوهبراین، ویژگیهایی مانند مترادفها، پیشنهادها، برجستهسازی و موارد دیگر را برای افزایش ارتباط و و سهولت استفاده از نتایج جستجوی شما ارائه میدهد. برای اجرای Elasticsearch در فضای ابری باید یک آشنایی کلی با مفهوم رایانش ابری داشته باشید تا بتوانید آن را پیکربندی و کلاستر را مدیریت کنید.
نحوه کار الستیک سرچ
پایه و اساس کار Elasticsearch چیست؟ شما میتوانید دادهها را با استفاده از API یا ابزارهای دریافت مانند Logstash و Amazon Kinesis Data Firehose به صورت داکیومنتهای JSON به Elasticsearch ارسال کنید. Elasticsearch به طور خودکار داکیومنت اصلی را ذخیره و یک مرجع قابل جستجو به داکیومنت در ایندکس کلاستر اضافه میکند. سپس میتوانید داکیومنت را با استفاده از API الستیک سرچ جستجو و بازیابی کنید. همچنین، میتوانید از سرویس Kibana که یک ابزار تصویرسازی است، برای تصویرسازی دادههای خود و ساخت داشبوردهای تعاملی استفاده کنید.
این، یک معرفی کوتاه بود تا بدانید پایه و اساس کار Elasticsearch چیست؟ اگر بخواهیم عملکرد این جستجوگر را دقیقتر بررسی کنیم، باید آن را به سه بخش تقسیم کنیم:
۱. مستندات و داکیومنتها
مستندات و داکیومنتها، واحد اصلی اطلاعاتی هستند که میتوانند در Elasticsearch ایندکس شوند. میتوان آنها را به عنوان ردیف در یک پایگاه داده رابطهای در نظر گرفت. بنابراین در این بخش، دادههایی را از منابع مختلف به داکیومنت Elasticsearch اضافه میکنیم.
میتوانید از ابزارهای دریافت برای استخراج دادهها و تبدیل آنها به داکیومنت استفاده کنید یا میتوانید از ابزارهای دیگر برای سینک نگه داشتن Elasticsearch با منبع داده استفاده کنید.
اگر قصد دارید در فضای ابری از الستیک سرچ استفاده کنید، نیاز به سرور ابری دارید که میتوانید آن را با بهترین قیمت و پشتیبانی قوی از مبین هاست تهیه کنید.
Index
در Elasticsearch، ایندکس یک ساختار داده توزیع شده است که برای ذخیره داکیومنت ها استفاده می شود. هر داکیومنت مجموعه ای از فیلدها و مقادیر است که اطلاعات مربوط به یک موضوع خاص را نشان می دهد. Elasticsearch ایندکس ها را به Shardهای کوچکتر تقسیم می کند که به طور موازی روی چندین گره (Node) در کلاستر توزیع شده اند. این امر باعث می شود که جستجوها و سایر عملیات ها بتوانند به صورت موازی اجرا شوند و در نتیجه، عملکرد کلی بهبود یابد.
میتوان ایندکس را به عنوان راهی برای سازماندهی و گروهبندی دادههای مرتبط با یکدیگر در نظر گرفت. ایندکس کردن در Elasticsearch شامل تعریف یک ایندکس (فضای نام یا Namespace) و مشخص کردن ساختار داکیومنت برای دادهها است. داکیومنتها با فرمت JSON به ایندکس اضافه میشوند. قابلیت ایندکس کردن، باعث شده تا الستیک سرچ یک موتور جستجوی قدرتمند در نظر گرفته شود.
Inverted Index
منظور از Inverted Index در Elasticsearch چیست؟ الستیک سرچ، دادههای داکیومنت را به شکلی فشرده و غیرقابل تغییر ذخیره میکند که به آن ایندکس معکوس یا Inverted Index گفته میشود. ایندکس معکوس دارای یک لیست از اصطلاحات است که مرتب شدهاند. این اصطلاحات، با رفرنس به داکیومنت خود ذخیره میشوند.
۲. سرچ
در این قسمت، ما کل داکیومنت را سرچ میکنیم. میتوانیم یک تجربه سرچ برای کاربری که از اپلیکیشن استفاده میکند، ایجاد کنیم. سپس با ابزارهای مختلف، جستجو را در Elasticsearch ادغام کنیم. برای اجرای جستجوها از ابزارهایی مانند Search UI و Search API استفاده میشود. در ادامه، دو فرایند اصلی که در حال اجرا هستند را توضیح میدهیم.
Querying
الستیک سرچ کوئریها را با Query DSL (یا Domain Specific Query) ارائه میدهد که برای ساخت کوئریهای سرچ، کاملا انعطافپذیر و قدرتمند است. با استفاده از آن میتوان طیف وسیعی از سرچها از ساده گرفته تا پیچیده را بر اساس معیارهای مختلف انجام داد. شما میتوانید معیارهایی مانند تطابق با اصطلاحات خاص، عبارات، بازههای مقادیر یا حتی شرایط بولی پیچیده را اضافه کنید.
Distributed Search
هنگامی که یک درخواست جستجو دریافت میشود، Elasticsearch کوئریها را در شارد (Shard)های مربوطه توزیع میکند. این شاردها در سراسر کلاستر توزیع شدهاند. هر شارد، کوئری را در دادههای لوکال خود به طور مستقل اجرا میکند و نتایج را برمیگرداند. گرههای هماهنگ کننده، تمام نتایج حاصل از Shardها را با هم ادغام میکنند. پس از ادغام، دادهها برای کاربر ارسال میشود.
۳. نتایج
در این قسمت، میتوانید از یکسری از ابزارها نظیر فیلد جستجوی Search API و بوستهای Search API برای بهبود و بهینهسازی نتایج جستجو استفاده کنید. با طی کردن مراحل زیر میتوان نتایج را بهینه کرد:
- Query Parsing: الستیک سرچ کوئریهای کاربران را به اصطلاحات، عبارات و عملگرهای منطقی جداگانه تجزیه میکند.
- Query Execution: الستیک سرچ کوئری تجزیه شده را روی دادههای ایندکس شده اجرا و داکیومنتهای منطبق را بازیابی میکند.
- Relevance Scoring: الستیک سرچ امتیاز مربوط به هر داکیومنت را بر اساس عوامل مختلفی مانند فراوانی اصطلاح، طول فیلد و موارد دیگر محاسبه میکند.
- Sorting: الستیک سرچ میتواند براساس امتیاز تناسب، برچسب زمانی داکیومنت، فیلد عددی یا معیارهای سفارشی، نتایج جستجو را مرتب کند.
- Pagination: سپس دادههای مرتبشده، صفحهبندی میشوند تا مجموعهای از نتایج جستجو را به کاربر بازگردانند.
مزایای الستیک سرچ
- استفاده سریع: اولین مزیت Elasticsearch چیست؟ این ابزار با اتکا به APIهای REST-based ساده، رابط HTTP ساده و استفاده از داکیومنتهای JSON، فرآیند شروع کار و ساخت سریع برنامههای کاربردی را برای موارد مختلف تسهیل میکند.
- عملکرد سطح بالا: ماهیت توزیعشده Elasticsearch آن را قادر میسازد تا حجم زیادی از دادهها را به صورت موازی پردازش کند و به سرعت بهترین نتایج منطبق با درخواستهای شما را پیدا کند.
- ابزارها و پلاگینهای رایگان: Elasticsearch با Kibana که یک ابزار تصویرسازی و گزارشدهی محبوب است، یکپارچه شده. همچنین، با ابزارهای Beats و Logstash نیز ادغام شده که به شما کمک میکند دادههای منبع را به راحتی تبدیل کرده و آنها را در کلاستر Elasticsearch خود بارگذاری کنید. علاوهبراین، میتوانید از پلاگینهای منبع باز مختلف Elasticsearch مانند تحلیلگرهای زبان و پیشنهاددهندگان برای افزودن قابلیتهای غنی به برنامههای خود استفاده کنید.
- عملکرد تقریبا آنی: یکسری از اقدامات مانند خواندن یا نوشتن دادهها در Elasticsearch معمولا کمتر از یک ثانیه طول میکشد. این ویژگی، به شما اجازه میدهد از الستیک سرچ برای موارد فوری مانند نظارت بر برنامه و تشخیص ناهنجاری استفاده کنید.
- توسعه آسان اپلیکیشن: Elasticsearch از زبانهای مختلف از جمله Java، Python، PHP، JavaScript، Node.js، Ruby و بسیاری دیگر پشتیبانی میکند. این امر توسعه دهندگان را قادر میکند که از زبان مورد علاقه خود برای کار با Elasticsearch استفاده کنند.
اصطلاحات رایج الستیک سرچ
در ادامه، سه اصطلاح رایج که برای استفاده از الستیک سرچ باید یاد بگیرید را توضیح میدهیم.
۱. Cluster
به مجموعهای از یک یا چند گره در الستیک سرچ، کلاستر گفته میشود. در واقع، هر سرور در کلاستر به عنوان یک گره شناخته میشود. گرهها با یکدیگر کار میکنند تا دادهها را ذخیره و ایندکس کنند، کوئریها را پردازش کنند، نتایج را به کاربران بازگردانند و عملیاتهای توزیعشده مختلف دیگر را انجام دهند. با پیوستن چندین گره به یکدیگر و تشکیل یک کلاستر، Elasticsearch میتواند بار کاری را بین گرهها توزیع کند. این امر باعث افزایش کارایی و در دسترس بودن Elasticsearch میشود.
فرض کنید یک وب سایت تجارت الکترونیک با حجم عظیمی از دادههای مربوط به محصولات خود سروکار دارد. با استفاده از یک کلاستر Elasticsearch با چندین گره، میتوان این داده ها را بین گرهها توزیع کرد و جستجوها را به صورت موازی روی چندین گره اجرا کرد. این امر باعث میشود که نتایج جستجو به سرعت به کاربران نمایش داده شوند، حتی زمانی که حجم جستجوها بالا باشد.
۲. Node
گره، بخشی از کلاستر و یک نمونه واحد از Elasticsearch است. کلاسترها قادر به ذخیره دادهها و انجام عملیات به طور مستقل هستند و میتوانند ماشین فیزیکی، ماشین مجازی یا کانتینر باشند. گرهها بر اساس نقش خود، به سه دسته تقسیم میشوند:
- Data Node: مسئول ذخیره و مدیریت دادههای واقعی هستند.
- Master Node: مسئول مدیریت حالت کلاستر، عملیات هماهنگی و حفظ متادیتا در سطح کلاستر هستند.
- Coordinating Node: مسئول دریافت درخواستهای جستجو و ایندکس کردن کاربران، مسیریابی درخواستها به گرههای داده مناسب و ادغام نتایج از گرههای داده مختلف هستند.
۳. Shard
شاردها بلوکهای سازنده برای توزیع دادهها هستند. ایندکسی که پس از دریافت داده ایجاد میشود به بخشهای کوچکی به اسم شارد تقسیم میشود. این شاردها، یک بخش مستقل در ایندکس هستند که روی یک گره ذخیره میشوند.
تعداد شارد مناسب به عوامل مختلفی مانند حجم دادهها، الگوی دسترسی به دادهها و منابع سخت افزاری موجود در کلاستر بستگی دارد. به طور کلی، تعداد شارد بیشتر به معنای جستجوی سریعتر است، اما میتواند به منابع بیشتری نیز نیاز داشته باشد.
کاربردهای الستیک سرچ و مثالهایی از آن
به عنوان یک موتور توزیعشده، Elasticsearch بسیار مقیاسپذیر است و امکان جستجوی تقریبا آنی را ارائه میدهد. این ابزار دارای ویژگیهای قابل توجهی است و راهحلهایی را بهوجود میآورد که فراتر از یک موتور جستجو است و میتواند از طیف وسیعی از نیازهای حیاتی در حال رشد کسبوکارها و موارد استفاده عملیاتی پشتیبانی کند. به طور کلی، Elasticsearch به لطف قابلیتهای جستجوی قدرتمند خود، به عنوان یک فناوری اساسی استفاده میشود که برنامههای کاربردی با ویژگیها و الزامات جستجوی پیچیده را تقویت میکند.
الستیکسرچ از تمام انواع دادهها از جمله عددی، متنی، مکانی، ساختار یافته و غیرساختار یافته پشتیبانی میکند. همچنین، به دلیل ماهیت همه کاره آن در مدیریت دادهها و جفت شدن با ابزارهای دیگر محبوبیت بسیار زیادی دارد. شرکتهایی مانند Wikipedia، Github، NY Times یا Facebook همگی از Elasticsearch برای موارد مختلف استفاده میکنند؛ از جستجوی آسان در کل مقالاتی که در ۱۶۴ سال فعالیت خود منتشر کردهاند گرفته، تا چت زنده آنی و تجربه تجارت الکترونیک یکپارچه.
هر کسب و کاری که نیاز به ارائه اطلاعات به روشی سریع دارد، میتواند از Elasticsearch به خوبی استفاده کند. الستیک سرچ دارای قابلیتهای تقریبا بیپایان و کاملی است که کسبوکارهای مختلف میتوانند بسته به اهداف خود برای رشد و ایجاد تغییرات جدید، از آنها استفاده کنند. برای اینکه درک بهتری از این موضوع پیدا کنید، در ادامه برخی از کاربردها و موارد استفاده Elasticsearch در کسبوکارهای مختلف را مثال میزنیم.
۱. جستجوی آنی در کاتالوگ محصولات یک فروشگاه آنلاین
فروشگاهها برای ایندکس کردن کاتالوگ و موجودی محصولات خود در کنار تمام ویژگیهای محصول، از Elasticsearch استفاده میکنند. وقتی مشتری فقط یکی از ویژگیهای خاص محصول مورد نظر خود را جستجو میکند، فروشگاه فورا میتواند محصولات مناسب را به کاربر نمایش دهد. داشتن یک نوار جستجوی فوری در سایت یک فروشگاه میتواند باعث افزایش درآمدزایی شود.
به این صورت که کاربران یک تجربه خوشایند از جستجو در کاتالوگ محصولات مختلف به دست میآورند. به این ترتیب، جستجو کردن به یک روش اصلی ناوبری نیز تبدیل میشود. Walgreens و Kreeger برخی از بزرگترین فروشگاههایی هستند که تجربه جستجو و خرید آنلاین مواد غذایی خود را با Elasticsearch ساده کردهاند.
۲. تجزیه و تحلیل گزارش عملیاتی
استفاده از Elasticsearch برای پردازش میلیاردها رویداد در هر روز برای تجزیه و تحلیل گزارشها و اطمینان از عملکرد سیستم یا تشخیص ناهنجاریها، به شرکتهایی مانند GoDaddy کمک کرده است تا تجربه مشتری و کاربر را بهبود ببخشند.
۳. جستجوی در محتوا و مدیای سایت
شرکتهای بزرگی نظیر Engadget و The New York Times از Elasticsearch برای جستجو در محتواهای سایتهای خود استفاده میکنند تا بهتر بفهمند که کاربرانشان دنبال چه چیزی هستند و چرا آن را جستجو میکنند. هدف از انجام همه این کارها این است که KPIهای تعامل کاربران خود را بهبود دهند.
اما نکتهای که باید به آن دقت کنید، این است که استفاده از Elasticsearch برای جستجوی محتوا فقط مختص به ناشران نیست.
Shopify و Asana نیز از آن استفاده میکنند تا مشتریانشان به راحتی بتوانند داکیومنتها و محتوای آنها را پیدا کنند. جستجو نیز فقط به مقالات محدود نمیشود. یکی از بزرگترین شرکتهای هاستینگ ویدیو به اسم Vimeo جستجوی از بین میلیونها ویدیو در روز را از طریق Elasticsearch فراهم میکند.
۴. چت زنده آنی
چت زنده، یک امکان بسیار کاربردی است که تجربه هزاران نفر از مشتریانی که روزانه میلیونها کوئری انجام میدهند، بهبود بخشیده است. همه اینها با استفاده از Elasticsearch انجام میشود که آرشیو ۴۶۰ میلیون داکیومنت را نگهداری و نتیجه کوئری را در زمان بسیار کوتاهی ارائه میکند.
۵. نظارت و تشخیص زودهنگام کلاهبرداری
SoftBank و Xoom با Elasticsearch بر سیستم خود نظارت میکنند و به این ترتیب، از خودشان در برابر کلاهبرداری و تهدیدات امنیتی محافظت میکنند.
۶. سرچ اپلیکیشن
یکی از بزرگترین شرکتهایی که از الستیک سرچ برای جستجوی درون برنامهای استفاده میکند، eBay است. این شرکت با موتور جستجوی الستیک سرچ از بین ۸۰۰ میلیون آگهی در کسری از ثانیه جستجو میکند و هر روز تجربه کاربری خوشایندی در سطح بالای جهانی به میلیونها مشتری خود در سراسر دنیا ارائه میدهد.
۷. تجزیه و تحلیل بیزینس
فروشگاه بزرگ Walmart که حتما اسم آن را شنیدهاید، برای شناخت و تشخیص الگوهای خرید مشتریان و تجزیه و تحلیل و معیارهای عملکرد فروشگاه، از الستیک سرچ استفاده میکند تا بتواند تجربه خرید حضوری و آنلاین مشتریان و همچنین موفقیت تجاری خود را تقویت کند.
۸. سرچ پروژه
فیسبوک هم یکی دیگر از اسامی بزرگی است که از الستیک سرچ استفاده کرده و با آن، از یک سرچ پروژه ساده به بیش از ۴۰ ابزار در چندین کلاستر توسعه پیدا کرده است. این کلاسترها بیش از ۶۰ میلیون کوئری در روز را انجام میدهند و هنوز هم در حال رشد هستند.
۹. تجزیه و تحلیل متریک
Sprint هم یکی دیگر از شرکتهای شناخته شده بزرگ و بینالمللی است که از الستیک سرچ استفاده میکند. اما شیوه استفاده Sprint از Elasticsearch چیست؟ این شرکت، برای تجزیه و تحلیل بیش از ۲۰۰ داشبورد از Elasticsearch استفاده میکند که روزانه ۳ میلیارد رویداد را از لاگها، پایگاههای داده، ایمیلها، Syslog ها، پیامهای آزمایشی و APIهای برنامه داخلی و فروشنده به منظور کسب بینش بهتر برای فروش محصولات نشان میدهد.
۱۰. تجزیه و تحلیل امنیتی
Slack در حال ساخت یک برنامه امنیتی دفاعی برای نظارت بر فعالیتهای مخرب با استفاده از Elasticsearch است. همچنین، Cisco هم برای استفاده از دادهها در جهت شناسایی و شکست هکرها و مبارزه با تهدیدات سایبری، از Elasticsearch استفاده میکند.
۱۱. کاوش و تحلیل دادههای عمومی
با استفاده از الستیک سرچ، میتوان دادههای عمومی مانند گفتگوهای شبکههای اجتماعی را به صورت آنی تجزیه و تحلیل کرد و از طریق تحلیل احساسات اجتماعی به درک و شناخت بهتری از مشتریان دست یافت.
این مواردی که به عنوان کاربردهای Elasticsearch عنوان کردیم، تنها بخشی از نحوه استفاده شرکتها از این ابزار بینظیر برای حل چالشهای رو به رشد است.
جمع بندی
الستیک سرچ یک موتور جستجو و تجزیه و تحلیل قدرتمند و مقیاسپذیر است که میتواند به شما در ذخیره، جستجو و تجزیه و تحلیل مقادیر زیادی از دادهها به صورت تقریبا آنی کمک کند. این ابزار دارای ویژگیها، مزایا و اصطلاحات رایجی است که باید قبل از استفاده از آن برای دادههای خود، آنها را در نظر بگیرید.
در این مقاله، توضیح دادیم که Elasticsearch چیست؟ همچنین، شما را با مزایا، اصطلاحات رایج و کاربردهای آن نیز آشنا کردیم و چند مثال هم زدیم. امیدواریم با نحوه کار الستیک سرچ آشنا شده باشید و برای ذخیره، جستجو و تجزیه و تحلیل دادههای خود از این موتور جستجوی متنباز و توزیعشده استفاده کنید.