مفاهیم اصلی در ElasticSearch

  • مدرس : علی بیگدلی
  • تاریخ انتشار: 1404/06/25
  • تعداد بازدید: 15

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

Index

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

Document

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


# مثال JSON سند برای ایندکس محصولات
{
  "product_id": 101,
  "name": "Laptop",
  "price": 2500
}

Field

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


{
  "name": "Laptop",
  "price": 2500,
  "available": true,
  "created_at": "2025-09-16"
}

Type

در نسخه‌های قدیمی‌تر Elasticsearch (قبل از نسخه 6)، هر ایندکس می‌توانست شامل چندین type باشد. هر type شبیه به یک جدول در دیتابیس‌های رابطه‌ای بود که اسناد (Documents) با ساختار مشابه را در خود نگه می‌داشت. اما از نسخه 6 به بعد، استفاده از چندین type در یک ایندکس منسوخ شد و هر ایندکس فقط یک type به نام _doc دارد.

Mapping

Mapping در Elasticsearch مانند Schema در دیتابیس‌های رابطه‌ای است. در واقع، mapping مشخص می‌کند که هر فیلد چه نوع داده‌ای دارد (مانند عددی، متنی، تاریخ و ...). با استفاده از mapping می‌توان رفتار ذخیره‌سازی و جستجوی فیلدها را کنترل کرد.

مثال ساده از Mapping در Elasticsearch


PUT products
{
  "mappings": {
    "properties": {
      "name": {
        "type": "text"
      },
      "price": {
        "type": "float"
      },
      "created_at": {
        "type": "date"
      },
      "in_stock": {
        "type": "boolean"
      }
    }
  }
}

در این مثال، ایندکسی به نام products ساخته می‌شود که mapping آن مشخص می‌کند فیلد name متنی، فیلد price عدد اعشاری، فیلد created_at تاریخ و فیلد in_stock بولین است.

تطبیق Elasticsearch با پایگاه‌داده‌های رابطه‌ای

Elasticsearch Relational Database توضیح
Index Database مجموعه‌ای از اسناد با موضوع مشابه، مانند دیتابیس محصولات یا کاربران.
Type (قدیمی) Table هر type مشابه یک جدول بود (در نسخه‌های جدید حذف شده است).
Document Row هر سند یک رکورد داده را نشان می‌دهد.
Field Column هر فیلد یک ویژگی یا ستون داده در یک سند است.
Mapping Schema ساختار و نوع داده‌ها را تعریف می‌کند.

Shard

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

Index Shards توضیح
Products 5 این ایندکس به 5 شارد تقسیم شده تا داده‌ها بین نودها پخش شوند.
Users 3 این ایندکس به 3 شارد تقسیم شده است.

Replica

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


# مثال فرضی
هر شارد اصلی (Primary Shard) = 1
تعداد Replica Shard = 1
تعداد کل شاردها در نودها = 2 شارد برای هر شارد اصلی

Cluster

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

با درک دقیق موارد بالا می‌توانید ساختار داده‌ها را بهینه کنید و جستجوهای سریع و قابل اعتماد در Elasticsearch داشته باشید.

ثبت دیدگاه


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

دیدگاه کاربران (0)


هیچ دیدگاهی ثبت نشده است. می‌توانید اولین نفر باشید.