PDA

View Full Version : جستجو در دیتا بیس شبیه به google



tazarvmmr
دوشنبه 03 آذر 1393, 00:54 صبح
سلام
وقتی به دنبال یک عبارت در یک ستون از یک جدول هستیم ایا راهی وجود داره که اگر خود مورد جستجو پیدا نشد مواردی که شباهت زیادی به مورد جستجو دارن برگردونده بشه؟
یعنی فرض کنین در یک ستون که نام و نام فامیل افراد ذخیره شده دنبال کامران میگردیم ولی پیدا نمیکنه حالا به ما پیشنهاد بده اسامی مثلا "کامیار" "کامبیز" "مهران" وجود داره یا مثل گوگل وقتی عبارت مورد جستجو رو سهوا اشتباه تایپ میکنیم و نتیجه ای نداره خود گوگل عبارت شبیه به اون رو جستجو میکنه، مثلا شما به اشتباه عبارت "aplication" رو جستجو میکنین ولی گوگل نتیجه جستجوی عبارت "Application" رو بر میگردونه و به شما میگه که اون عبارت پیدا نشد و نتایج این عبارت لیست شده!

آیا کسی راهی میدونه؟

ممنون

مرتضی تقدمی
دوشنبه 03 آذر 1393, 13:15 عصر
سلام
تابع DIFFERENCE رو بررسي كنيد. ميزان شباهت تو رشته رو با عددي بين 0-4 بر مي گردونه
موفق باشيد

tazarvmmr
دوشنبه 03 آذر 1393, 16:20 عصر
خیلی ممنون از راهنمایی
من سعی کردم یک کوئری بسازم که از یک جدول بنام Persons اسامی که شبیه به اسم انتخابیم هست رو استخراج کنم ولی جواب درستی نگرفتم! این یک کد نمونه شما اشکال رو کجا میبینید؟


declare @keyword nvarchar(100)

set @keyword = N'علی'
Select *
From (
Select PersonName, DIFFERENCE(PersonName, @keyword) as dd
From Persons
) as tbl
Where dd < 1


این کد فقط ردیفهایی که اسامی انگلیسی هستند رو میاره و هیچ ردیف فارسی بر نمیگردونه! خط آخر رو اگر بگم برابر 4 باشه همه اسامی رو میاره و اگر بگم کوچکتر از 4 باشه فقط اسامی انگلیسی رو میاره! همه ردیفهایی که برمیگردونه هم مقدار dd برابر 0 هستش!

ممنون

tazarvmmr
دوشنبه 03 آذر 1393, 17:05 عصر
متوجه شدم که این تابع با زبان انگیلیسی بدون مشکل اجرا میشه Collation مربوط به فیلد PersonName رو به Persian-100 تغییر دادم ولی باز هم درست کار نمیکنه یعنی برای همه مقادر dd رو برابر 4 برمیگردونه!!!!

کسی تجربه ای در این مورد داره؟

126012

حمیدرضاصادقیان
سه شنبه 04 آذر 1393, 21:48 عصر
سلام
تابع Difference عملا بر روی نتیجه تابع Soundex عمل میکند.
تابع Soundex یک رشته 4 حرفی رو از کلمه شما بهتون میده و خروجی اونو به تابع Difference میدین وبراتون مقایسه میکنه.
این تابع فقط برای زبان انگلیسی هست و روی زبانهای Unicode مثل فارسی کار نمیکنه.
دراین مقاله (http://www.codeproject.com/Articles/26880/Arabic-Soundex) میتونید یک نمونه مشابه پیاده سازی شده توسط توابع Clr رو برای این مورد ببینید.