<div align="JUSTIFY" dir="rtl">
<p align="center" dir="rtl">بسم الله الرحمن الرحیم</p>

<p align="center">
  <img src="img/index.png" />
</p>

# جستجو با مترادف

مترادف کلمات یا عباراتی هستند که معنی یکسان یا مشابه دارند. آنها یک جنبه مهم جستجو هستند، زیرا می توانند تجربه جستجو را بهبود بخشند و دامنه نتایج جستجو را افزایش دهند.

## مترادف ها به شما اجازه می دهند:

     * ارتباط جستجو را با یافتن اسناد مرتبطی که از عبارات مختلفی برای بیان یک مفهوم استفاده می کنند، بهبود بخشید.
     * واژگان خاص دامنه را کاربرپسندتر کنید و به کاربران اجازه دهید از عبارات جستجویی استفاده کنند که با آنها آشنایی بیشتری دارند.
     * برای مدیریت شفاف اشتباهات رایج، غلط املایی و غلط املایی رایج را تعریف کنید.

مترادف ها با استفاده از مجموعه های مترادف با هم گروه بندی می شوند. شما می توانید به تعداد مورد نیاز مجموعه مترادف داشته باشید.

## برای استفاده از مجموعه‌های مترادف در Elasticsearch، باید:

     * مجموعه مترادف خود را ذخیره کنید
     * فیلترهای رمز و تحلیلگر مترادف را پیکربندی کنید

## مجموعه مترادف خود را ذخیره کنید

مجموعه‌های مترادف شما باید در Elasticsearch ذخیره شوند تا تحلیلگرها بتوانند به آنها مراجعه کنند. سه راه برای ذخیره مجموعه های مترادف شما وجود دارد:

## مترادف API

می‌توانید از APIهای مترادف برای مدیریت مجموعه‌های مترادف استفاده کنید. این انعطاف‌پذیرترین رویکرد است، زیرا امکان تعریف و تغییر پویا مجموعه‌های مترادف را فراهم می‌کند.

تغییرات در مجموعه های مترادف شما به طور خودکار تحلیلگرهای مرتبط را بارگیری مجدد می کند.

## فایل مترادف

می توانید مترادف های مجموعه خود را در یک فایل ذخیره کنید.

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

### نمونه فایل مترادف:

<div align="left" dir="ltr" style="background-color:black;">

```bash
# Blank lines and lines starting with pound are comments.

# Explicit mappings match any token sequence on the left hand side of "=>"

# and replace with all alternatives on the right hand side.

# These types of mappings ignore the expand parameter in the schema.

# Examples:

i-pod, i pod => ipod
sea biscuit, sea biscit => seabiscuit

# Equivalent synonyms may be separated with commas and give

# no explicit mapping. In this case the mapping behavior will

# be taken from the expand parameter in the token filter configuration.

# This allows the same synonym file to be used in different synonym handling strategies.

# Examples:

ipod, i-pod, i pod
foozball , foosball
universe , cosmos
lol, laughing out loud

# If expand==true in the synonym token filter configuration,

# "ipod, i-pod, i pod" is equivalent to the explicit mapping:

ipod, i-pod, i pod => ipod, i-pod, i pod

# If expand==false, "ipod, i-pod, i pod" is equivalent

# to the explicit mapping:

ipod, i-pod, i pod => ipod

# Multiple synonym mapping entries are merged.

foo => foo bar
foo => baz

# is equivalent to

foo => foo bar, baz

```

</div>

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

وقتی یک مجموعه مترادف به روز می شود، تحلیلگرهای جستجویی که از آن استفاده می کنند باید با استفاده از API تحلیلگر جستجوی بارگذاری مجدد به روز شوند.

این همگام‌سازی و بارگیری مجدد دستی، این رویکرد را نسبت به استفاده از مترادف‌های API انعطاف‌پذیرتر می‌کند.

## درون خطی

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

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

## فیلترهای رمز و تحلیلگر مترادف را پیکربندی کنید

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

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

     * نمودار مترادف: توصیه می شود از آن استفاده کنید، زیرا می تواند مترادف های چند کلمه ای را به درستی مدیریت کند ("با عجله"، "در عجله").
     * مترادف: در صورت نیاز به استفاده از مترادف های چند کلمه ای توصیه نمی شود.

اسناد فیلتر نشانه مترادف را برای جزئیات پیکربندی و دستورالعمل های اضافه کردن آن به یک تحلیلگر بررسی کنید.

## آنالایزر خود را تست کنید

می توانید پیکربندی تحلیلگر را بدون تغییر تنظیمات فهرست خود آزمایش کنید. از تجزیه و تحلیل API برای آزمایش زنجیره تحلیلگر خود استفاده کنید:

<div align="left" dir="ltr" style="background-color:black;">

```json
GET /_analyze
{
  "tokenizer": "standard",
  "filter" : [
    "lowercase",
    {
      "type": "synonym_graph",
      "synonyms": ["pc => personal computer", "computer, pc, laptop"]
    }
  ],
  "text" : "Check how PC synonyms work"
}
```

</div>

## مترادف ها را در زمان فهرست یا جستجو اعمال کنید

آنالایزرها را می توان در زمان فهرست یا زمان جستجو به کار برد.

شما باید تصمیم بگیرید که چه زمانی مترادف های خود را اعمال کنید:

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

مجموعه‌های مترادف ایجاد شده با استفاده از مترادف‌های API فقط در زمان جستجو قابل استفاده هستند.

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

مثال زیر my_analyzer را به عنوان تحلیلگر جستجو به فیلد عنوان در نگاشت شاخص اضافه می کند:

<div align="left" dir="ltr" style="background-color:black;">

```json
  "mappings": {
    "properties": {
      "title": {
        "type": "text",
        "search_analyzer": "my_analyzer",
        "updateable": true
      }
    }
  }
```

</div>

[منبع](https://www.elastic.co/guide/en/elasticsearch/reference/current/search-with-synonyms.html)

<p align="center" dir="rtl">صلوات</p>
</div>
