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: |

Activate up to 20 bots The initiatives announced by Perekopsky include monitoring the content in groups. According to the executive, posts identified as lacking context or as containing false information will be flagged as a potential source of disinformation. The content is then forwarded to Telegram's fact-checking channels for analysis and subsequent publication of verified information. For crypto enthusiasts, there was the “gm” app, a self-described “meme app” which only allowed users to greet each other with “gm,” or “good morning,” a common acronym thrown around on Crypto Twitter and Discord. But the gm app was shut down back in September after a hacker reportedly gained access to user data. Write your hashtags in the language of your target audience.
from us


Telegram DotNet | دات نت
FROM American