DOTNETCODE Telegram 3066
🔍 جستجوی فازی (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 🖥👨‍💻
Please open Telegram to view this post
VIEW IN TELEGRAM
👍114🔥1



tgoop.com/dotnetcode/3066
Create:
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".

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

📚💻 @dotnetcode 🖥👨‍💻

BY DotNet | دات نت


Share with your friend now:
tgoop.com/dotnetcode/3066

View MORE
Open in Telegram


Telegram News

Date: |

In the “Bear Market Screaming Therapy Group” on Telegram, members are only allowed to post voice notes of themselves screaming. Anything else will result in an instant ban from the group, which currently has about 75 members. How to Create a Private or Public Channel on Telegram? Telegram desktop app: In the upper left corner, click the Menu icon (the one with three lines). Select “New Channel” from the drop-down menu. Telegram users themselves will be able to flag and report potentially false content. Polls
from us


Telegram DotNet | دات نت
FROM American