tgoop.com/dotnetcode/3066
Last Update:
🔍 جستجوی فازی (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"
.📚💻 @dotnetcode