ویرگول
ورودثبت نام
Mostafa Ahmadi
Mostafa Ahmadi
Mostafa Ahmadi
Mostafa Ahmadi
خواندن ۷ دقیقه·۱ سال پیش

الستیک سرچ: ابزار قدرتمند جستجو و تحلیل داده‌ها

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


معرفی

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

کاربردهای الستیک سرچ

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

ویژگی‌های کلیدی الستیک سرچ

۱. توزیع‌پذیری و مقیاس‌پذیری:‌الستیک سرچ طوری طراحی شده که در قالب یک کلاستر (خوشه) کار کند. کلاستر از چند نود (گره) تشکیل می‌شود و هر نود می‌تواند یک سرور مستقل باشد. داده‌ها در قالب شاردهایی تقسیم می‌شوند که این شاردها بین نودها توزیع می‌شوند. با افزودن نودهای جدید به کلاستر، ظرفیت سیستم افزایش پیدا می‌کند و عملکرد بهبود می‌یابد.

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

۳. انعطاف‌پذیری در ذخیره‌سازی داده‌ها:‌انواع مختلف داده مثل متن، عدد، تاریخ، موقعیت جغرافیایی و حتی داده‌های باینری را می‌توانید در این ابزار ذخیره و مدیریت کنید.

۴. ارتباط آسان با رابط‌های ساده:‌تمام عملیات الستیک سرچ از طریق درخواست‌های اینترنتی ساده (HTTP) قابل انجام است. این ویژگی کار با سیستم‌های دیگر را بسیار آسان می‌کند.

۵. تحلیل داده‌ها:‌الستیک سرچ فقط برای جستجو طراحی نشده است؛ بلکه قابلیت انجام تحلیل‌های پیچیده را نیز دارد. مثلاً می‌توانید داده‌ها را گروه‌بندی کنید یا گزارش‌های دقیق و جزئی تهیه کنید.


جستجو با الستیک سرچ

حالا بذار از اولش برات توضیح بدم که چطوری کار می‌کنه و داستانش چیه.

ورود داده (Indexing)

وقتی یه داده‌ای رو می‌خوایم وارد الستیک کنیم، این داده توی چیزی به اسم "ایندکس" ذخیره می‌شه. ایندکس رو می‌تونی یه جورایی مثل یه کشوی فایل در نظر بگیری که همه‌ی اطلاعات مربوط به یه موضوع خاص اونجا ذخیره شده.
قبل از این که داده وارد بشه، یه فرآیند به اسم آنالیز (Analyze) روش انجام می‌شه.

آنالیزر و فیلترها

آنالیزر، داده رو می‌گیره و خردش می‌کنه به تیکه‌های کوچیک‌تر که بهشون می‌گن توکن (Token). مثلاً جمله‌ی «من الستیک سرچ دوست دارم» رو می‌شکنه به این تیکه‌ها:

من ـ‌ الستیک - سرچ - دوست - دارم

بعد از این مرحله، فیلترها وارد بازی می‌شن. فیلترها می‌تونن کارای مختلفی انجام بدن، مثلاً:

  • لوور کیس (Lowercase filter): همه‌ی کلمات رو کوچیک می‌کنه (مثل تبدیل "Search" به "search").
  • استاپ ورد (Stopword filter): یه سری کلمات بی‌اهمیت مثل "و"، "از"، "به"،"the"،"in" رو حذف می‌کنه.
  • سنونیم (Synonym filter - Expansion): مترادف‌ها و کلمه های مرتبط رو اضافه می‌کنه، مثلاً "ماشین" و "خودرو" رو یکی در نظر می‌گیره.(البته نیاز به کانفیگ های دقیق تری داره)
  • استیمینگ (Stemming) : کلمات مختلف با شکل‌های گرامری یا صرفی متفاوت (مثل زمان، جمع، شناسه‌ها) همگی به یه شکل ساده‌تر تبدیل بشن و در جستجوها به‌عنوان یکسان شناخته بشن. مثلا گفته‌ایم → گفت - می‌گویم → گو - می‌روند → رو - رفته بود → رفت

جستجو (Querying)

وقتی کاربر یه چیزی سرچ می‌کنه، اون چیزی که سرچ کرده هم دقیقاً از همون مسیری که داده‌ها وارد شدن، رد می‌شه (یعنی آنالیز و فیلتر می‌شه). بعد الستیک میاد اون توکن‌ها رو با داده‌هایی که ذخیره کرده مقایسه می‌کنه و بر اساس یه سری الگوریتم رتبه‌بندی (مثل TF-IDF یا BM25) نتایج رو مرتب می‌کنه.

جمع‌آوری نتیجه (Scoring and Results)

اینجاست که نتایج پیدا شده یه امتیاز (Score) می‌گیرن. این امتیاز نشون می‌ده هر نتیجه چقدر به چیزی که کاربر سرچ کرده نزدیکه.
در نهایت، الستیک سرچ یه لیست مرتب از نتایج رو برمی‌گردونه که می‌تونی به کاربر نشون بدی. مثلاً وقتی تو گوگل سرچ می‌کنی، نتایجی که اول می‌بینی امتیاز بالاتری گرفتن.


ساختار و اجزای اصلی

هر کلاستر یک نود اصلی یا مستر نود دارد که مسئول مدیریت شاردها و هماهنگی بین نودها است. سایر نودها می‌توانند به عنوان نودهای داده یا نودهای مخصوص تحلیل و پردازش استفاده شوند. این ساختار توزیع‌شده باعث می‌شود که حتی در صورت خرابی یک نود، داده‌ها از طریق نسخه‌های کپی (رپلیکا) قابل بازیابی باشند.

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


    انواع داده‌ها در الستیک‌سرچ

الستیک‌سرچ انواع مختلفی از داده‌ها را برای پشتیبانی از انواع مختلف اطلاعات ارائه می‌دهد:

انواع داده‌های اصلی

  • نوع string منسوخ شده و با دو نوع مجزا جایگزین شده است: text، keyword
  • متن (Text): برای محتوای جستجوی کامل‌متن (رشته‌های تجزیه‌شده)
  • کلمه کلیدی (Keyword): برای جستجوی تطبیق دقیق (رشته‌های بدون تجزیه)
  • عددی (Numeric): شامل عدد صحیح، عدد بلند، شناور، دبل
  • تاریخ (Date): زمان‌ها و تاریخ‌های تقویمی
  • بولین (Boolean): مقادیر درست/نادرست
  • باینری (Binary): مقادیر باینری رمزگذاری‌شده با Base64
  • محدوده (Range): شامل integer_range، float_range، long_range، double_range، date_range، ip_range

انواع داده‌های پیچیده

  • شیء (Object): برای اشیاء JSON تو در تو
  • تو در تو (Nested): برای آرایه‌های اشیایی که باید به‌طور مستقل جستجو شوند
  • نقاط جغرافیایی Geo-point: برای جفت‌های عرض و طول جغرافیایی
  • شکل جغرافیایی Geo-shape: برای اشکال جغرافیایی پیچیده
  • یا shape و point برای داده‌های لزوما غیر جغرافیایی

انواع جستجوها در الستیک‌سرچ

الستیک‌سرچ انواع مختلفی از جستجوها را برای سناریوهای مختلف جستجو ارائه می‌دهد:

جستجوهای کامل‌متن

  • جستجوی تطبیق (Match Query): جستجوی استاندارد کامل‌متن
  • جستجوی تطبیق عبارت (Match Phrase Query): جستجوی عبارت‌های دقیق
  • جستجوی چندگانه (Multi-match Query): جستجو در چندین فیلد
  • جستجوی رشته کوئری (Query String Query): پشتیبانی از نحو جستجوی پیچیده
  • جستجوی Regex (Regex Query): جستجو با استفاده از عبارت‌های منظم برای تطبیق الگوهای پیچیده در متن
  • جستجوی wildcard (Wildcard Query): جستجو با استفاده از کاراکترهای wildcard (* برای چندین کاراکتر، ? برای یک کاراکتر)

جستجوهای در سطح کلمه (Term Level Queries)

  • جستجوی کلمه (Term Query): تطبیق دقیق یک کلمه خاص
  • جستجوی چند کلمه (Terms Query): تطبیق چندین کلمه

جستجو‌های محدوده‌ای و exists

  • جستجوی محدوده (Range Query): پیدا کردن اعداد یا تاریخ‌ها در یک محدوده
  • جستجوی وجود (Exists Query): پیدا کردن اسنادی که در آن‌ها یک فیلد وجود داشته باشد

جستجوهای ترکیبی (Compound Queries)

  • جستجوی بولین (Bool Query): ترکیب چندین جستجو با منطق بولی
  • جستجوی Dis Max (Dis Max Query): بازگشت اسنادی که با هر جستجو مطابقت دارند و در عین حال نتیجه‌ای که بالاترین امتیاز را دارد، ترجیح داده می‌شود
  • جستجوی امتیاز تابعی (Function Score Query): تغییر امتیازها با استفاده از توابع

جستجوهای تخصصی

  • جستجوهای جغرافیایی (Geo Queries): جستجو بر اساس موقعیت‌های جغرافیایی
  • مشابه این (More Like This): پیدا کردن اسناد مشابه
  • جستجوی اسکریپت (Script Query): جستجوهای سفارشی با استفاده از اسکریپت‌ها

هر نوع جستجو هدف خاصی دارد و می‌توان آن‌ها را ترکیب کرد تا الگوهای جستجوی پیچیده‌ای ایجاد کنند که با استفاده‌های خاص هماهنگ باشد.



مثال‌های از کوئری‌ها

بلاک کد تمیز پیدا نکردم تو ویرگول، باقیشو تو قسمت های بعدی میگم :/


نسخه کامل تر و انگلیسی در نوشن

https://ink-elephant-38e.notion.site/Elastic-Search-Introductio%E2%80%94175c14f6c49f8024ab2fd08351fc90de?pvs=4
الستیک سرچتحلیل داده‌هازبان فارسیسرچ
۱
۰
Mostafa Ahmadi
Mostafa Ahmadi
شاید از این پست‌ها خوشتان بیاید