تو این روزا بهتره که همیشه علم خودمون رو بالا ببریم و بتونیم با سریع ترین راه ممکن خودمونو بروز نگه داریم.
- سعی کنیم از کمترین امکانات بیشترین بهره رو ببریم
منتظرت هستیم😉
دنیا رو جای بهتری برای یادگیری کنیم 🌹
#course #book
🆔 @dotnetcode
Post #3066
1.21K
🔍 جستجوی فازی (Fuzzy Search) در Elasticsearch چیست و چطور کار میکند؟
تاحالا شده در یک سایت یا اپلیکیشن، کلمهای را با غلط املایی جستجو کنید ولی باز هم نتایج درستی بگیرید؟ این جادو نیست، این قدرت جستجوی فازی است!
به زبان ساده، جستجوی فازی به ما اجازه میدهد کلماتی را پیدا کنیم که شبیه به کلمه مورد نظر ما هستند، حتی اگر دقیقاً یکسان نباشند. این قابلیت برای جبران غلطهای املایی و اشتباهات تایپی عالی است.
-----
⚙️ الگوریتم پشت صحنه: فاصله لِوِناشتاین (Levenshtein)
مفهوم اصلی خیلی ساده است: فاصله لوناشتاین یعنی تعداد تغییرات (حذف، اضافه یا جایگزینی یک حرف) که لازم است تا یک کلمه به کلمهی دیگر تبدیل شود.
بیایید با یک مثال ببینیم:
فرض کنید کاربر تایپ کرده
- مقایسه:
- تغییر لازم: فقط کافیست حرف
- نتیجه: فاصله لوناشتاین بین این دو کلمه
-----
👨💻 مثال عملی در Elasticsearch
فرض کنید این اسناد را در ایندکس خود داریم:
- سند اول:
- سند دوم:
- سند سوم:
حالا کاربر کلمهی اشتباه
- در بخش
- در بخش
🤔 نتیجه چه میشود؟
- مقایسه با "elasticsearch":
کلمهی
- مقایسه با "statistics":
فاصله این دو کلمه بسیار بیشتر از
- مقایسه با "elastics":
کلمهی
بنابراین، اسناد شماره یک و سه در نتایج نمایش داده میشوند!
-----
💡 نکته طلایی: از `fuzziness: "AUTO"` استفاده کنید!
به جای عدد ثابت (مثل 1 یا 2)، بهتر است از مقدار
- کلمات کوتاه (تا 2 حرف): بدون فازی (فاصله 0)
- کلمات متوسط (3 تا 5 حرف): حداکثر 1 غلط مجاز (فاصله 1)
- کلمات بلند (بیش از 5 حرف): حداکثر 2 غلط مجاز (فاصله 2)
این کار جلوی نتایج بیربط برای کلمات کوتاه را میگیرد و بهترین عملکرد را دارد.
-----
✅ جمعبندی نهایی:
- هدف اصلی: پیدا کردن نتایج با وجود غلط املایی.
- الگوریتم پایه: فاصله لوناشتاین.
- پارامتر کلیدی:
- بهترین روش: استفاده از
🎺برای یادگیری بیشتر و دریافت مطالب مفید در زمینه .NET و برنامهنویسی، به کانال ما بپیوندید!
📚💻 @dotnetcode 🖥👨💻
تاحالا شده در یک سایت یا اپلیکیشن، کلمهای را با غلط املایی جستجو کنید ولی باز هم نتایج درستی بگیرید؟ این جادو نیست، این قدرت جستجوی فازی است!
به زبان ساده، جستجوی فازی به ما اجازه میدهد کلماتی را پیدا کنیم که شبیه به کلمه مورد نظر ما هستند، حتی اگر دقیقاً یکسان نباشند. این قابلیت برای جبران غلطهای املایی و اشتباهات تایپی عالی است.
-----
⚙️ الگوریتم پشت صحنه: فاصله لِوِناشتاین (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










