TGViewer
DotNet | دات نت DotNet | دات نت @dotnetcode · 1.22K subscribers
Post #3066 1.21K
🔍 جستجوی فازی (Fuzzy Search) در Elasticsearch چیست و چطور کار می‌کند؟

تاحالا شده در یک سایت یا اپلیکیشن، کلمه‌ای را با غلط املایی جستجو کنید ولی باز هم نتایج درستی بگیرید؟ این جادو نیست، این قدرت جستجوی فازی است!

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

-----

⚙️ الگوریتم پشت صحنه: فاصله لِوِن‌اشتاین (Levenshtein)

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

بیایید با یک مثال ببینیم:
فرض کنید کاربر تایپ کرده elatic اما منظورش elastic بوده.

- مقایسه: elatic و elastic
- تغییر لازم: فقط کافیست حرف s را اضافه کنیم. (1 تغییر)
- نتیجه: فاصله لون‌اشتاین بین این دو کلمه 1 است.

-----

👨‍💻 مثال عملی در Elasticsearch

فرض کنید این اسناد را در ایندکس خود داریم:

- سند اول: An introduction to elasticsearch
- سند دوم: Learning about statistics
- سند سوم: The basics of elastics

حالا کاربر کلمه‌ی اشتباه elastik را جستجو می‌کند. یک کوئری فازی به شکل زیر است:

GET /my_index/_search
{
"query": {
"fuzzy": {
"title": {
"value": "elastik",
"fuzziness": "2"
}
}
}
}


- در بخش value کلمه‌ای که کاربر جستجو کرده قرار می‌گیرد.
- در بخش fuzziness که مهم‌ترین قسمت است، ما به Elasticsearch می‌گوییم کلماتی را پیدا کن که حداکثر 2 تغییر با کلمه ما دارند.

🤔 نتیجه چه می‌شود؟

- مقایسه با "elasticsearch":
کلمه‌ی elastik با یک تغییر به elastic تبدیل می‌شود. چون فاصله 1 کمتر از 2 است، پس ✅ این سند پیدا می‌شود.

- مقایسه با "statistics":
فاصله این دو کلمه بسیار بیشتر از 2 است، پس ❌ این سند پیدا نمی‌شود.

- مقایسه با "elastics":
کلمه‌ی elastik با دو تغییر به elastics تبدیل می‌شود. چون فاصله 2 با fuzziness ما برابر است، پس ✅ این سند هم پیدا می‌شود.

بنابراین، اسناد شماره یک و سه در نتایج نمایش داده می‌شوند!

-----

💡 نکته طلایی: از `fuzziness: "AUTO"` استفاده کنید!

به جای عدد ثابت (مثل 1 یا 2)، بهتر است از مقدار "AUTO" استفاده کنید. این حالت هوشمند، fuzziness را بر اساس طول کلمه تنظیم می‌کند:

- کلمات کوتاه (تا 2 حرف): بدون فازی (فاصله 0)
- کلمات متوسط (3 تا 5 حرف): حداکثر 1 غلط مجاز (فاصله 1)
- کلمات بلند (بیش از 5 حرف): حداکثر 2 غلط مجاز (فاصله 2)

این کار جلوی نتایج بی‌ربط برای کلمات کوتاه را می‌گیرد و بهترین عملکرد را دارد.

-----

✅ جمع‌بندی نهایی:

- هدف اصلی: پیدا کردن نتایج با وجود غلط املایی.
- الگوریتم پایه: فاصله لون‌اشتاین.
- پارامتر کلیدی: fuzziness (حداکثر تغییرات مجاز).
- بهترین روش: استفاده از "fuzziness": "AUTO".

🎺برای یادگیری بیشتر و دریافت مطالب مفید در زمینه .NET و برنامه‌نویسی، به کانال ما بپیوندید!

📚💻 @dotnetcode 🖥👨‍💻
  • 👍 11
  • ❤ 4
  • 🔥 1
More from @dotnetcode
  1. Sep 16, 2026ورک‌شاپ «AI Agents in C# (MAF)» در این ورک‌شاپ به بررسی امکانات جدید برنامه‌نویسی با کتابخ…
  2. Jul 10, 2026#مهندس_فکر_کن قسمت:4️⃣ 🎯مصاحبه‌کننده: ءCache Stampede چیست؟ فرض کن یک کلید در Cache داری:…
  3. Jun 12, 20261. Indexes منابع پیشنهادی این چالش که برای من اینها جذاب بوده و هست. A. Designing Data-Int…
  4. Jun 9, 2026آینده هوش مصنوعی و مهندسی کامپیوتر هوش مصنوعی مهندسی را نابود نمی‌کند، اما در سکوت در حال…
  5. Jun 4, 2026تحولی بزرگ در دنیای سی‌شارپ: ویژگی هیجان‌انگیز Union Types در C# 15! بالاخره یکی از جذاب‌ت…
  6. Feb 8, 2026👩‍💻 پستگرس رو ۲.۵ برابر سریع‌تر کن! تصور کن مغز متفکر دیتابیست (Parser) رو بدی دست هوش م…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →