PDA

View Full Version : فرمول جستجو چگونه هست؟



Hossis
پنج شنبه 06 خرداد 1389, 13:17 عصر
اگر ديده باشيد، در گوگل يا برخي نرم افزار ها ، براي جستجو گزينه هاي مختلفي دارند مثل

تمام اين کلمات
برخي از اين کلمات
بدون اين کلمات
....
فرمول اين جستجو چگونه است خصوصا اگر اين ها را با هم ترکيب کنيم و کاربر از همه اين گزينه ها استفاده کند مثل
"برنامه نويسي" + بيسيک -دات نت
ما يک متني داريم که مي خواهيم اين عبارت رو درون اون جستجو کنيم ، کد جستجو چطور نوشته مي شود؟؟

saber187518
پنج شنبه 06 خرداد 1389, 18:25 عصر
با سلام
دوست عزیز برای حل این مشکل باید توی جستجو
در این روش کلماتی را که عینا همان هستند جستجو میکند.


select field from table where @p=field

در این روش کلماتی که شبیه کلمه مورد نظر هستند را جستجو میکند


select field from table where @p like '%'+field+'%'

شک دارم که اون + ها هست یا نه. (کمی فراموش کردم)
و شما با ترکیب های عطفی و فصلی این دو میتونید گزینه های مورد نظر رو پیدا کنید.
موفق باشی.

mohsensaghafi
پنج شنبه 06 خرداد 1389, 18:27 عصر
سلام دوست عزیز.
همچین تعریفی برای جستجو تو یه متن معنی نداره واسه همینه که نتونستی حلش کنی.
باید این رو مثلا تو فایل های یه فولدر بررسی کنی. اینکه آیا تو این فایل حتما کلمه فلان ویا فلان اومده یا نه.
به این صورت فکر کن ببین به نتیجه ای می رسی یا نه؟!

Hossis
پنج شنبه 06 خرداد 1389, 21:37 عصر
با سلام
دوست عزیز برای حل این مشکل باید توی جستجو
در این روش کلماتی را که عینا همان هستند جستجو میکند.


select field from table where @p=field

در این روش کلماتی که شبیه کلمه مورد نظر هستند را جستجو میکند


select field from table where @p like '%'+field+'%'
.
اين روش ها رو بلدم و خودم اجرا کردم ولي وقتي چند روش باهم ترکيب شدند ، جستجو سخت ميشه
لازم هم نيست که ختما از پايگاه داده جستجو بشه که شما اين کد رو نوشتي ، فرض کن از يک فايل متني مي خواي اين جستجو رو انجام بديد
فرض کنيد يک مقاله سي صفحه اي داريد و کاربر مي خواهد اين طوري جستجو کنه
("امام زمان" + غيبت|حضور -قيام + "نواب اربعه")
اين جستجو چجوري انجام ميشه با اين فاکتور

saber187518
جمعه 07 خرداد 1389, 02:21 صبح
با سلام
به نظرم برای این جستجو باید اولا که متن رو کلمه به کلمه جدا کنی.
بعد برای اینکه بتونی کلمه با تطبیق 100% رو حساب کنی باید از string.compare استفاده کنی و برای اینکه ببینی آیا کلمه مورد نظرت در کلمه استخراج شده از متن وجود داره یا نه باید تابع جستجوی یک زیر رشته در یک رشته رو استفاده کنی.
البته تابع جستجوی زیر رشته در رشته رو فراموش کردم.
امیدوارم که اینطوری بشه.
یاعلی...

Hossis
جمعه 07 خرداد 1389, 21:35 عصر
با سلام
به نظرم برای این جستجو باید اولا که متن رو کلمه به کلمه جدا کنی.
بعد برای اینکه بتونی کلمه با تطبیق 100% رو حساب کنی باید از string.compare استفاده کنی و برای اینکه ببینی آیا کلمه مورد نظرت در کلمه استخراج شده از متن وجود داره یا نه باید تابع جستجوی یک زیر رشته در یک رشته رو استفاده کنی.
البته تابع جستجوی زیر رشته در رشته رو فراموش کردم.
امیدوارم که اینطوری بشه.
یاعلی...
به نظر من بايد چند ليست ايجاد کرد
يک ليست براي کلماتي که بايد جستجو شوند ، عبارات دقيق هم در اين ليست قرار مي‌گيرند.
ليستي از کلماتي که نبايد جستجو شوند.
و در آخر ليستي از کلماتي که بايد يکي از آنها جستجو شود.
بعد با تابع Split اين ها را از هم جدا مي کنيم ، فاصله ها را قبلا تبديل به "+" مي‌کنيم و بعد توسط شرط مخصوص به جستجو مي پردازيم
مثال : متن زير را مي خواهيم دز يک فايل متنتي يا يک رشته جستجو کنيم
بيسيک+ويژوال "دات نت" -شارپ + 2005|2008
dim Ls1() as string =split("بيسيک/ويژوال/دات نت/2005|2008","/")
...

kmotavali
شنبه 08 خرداد 1389, 10:30 صبح
SELECT FiledName FROM TableName WHERE FiledName LIKE '%Value%';s
اون S آخر فقط براي نمايش صحيح جمله گذاشته شده
value رشته مورد جستجو مي باشد

Hossis
شنبه 08 خرداد 1389, 22:28 عصر
SELECT FiledName FROM TableName WHERE FiledName LIKE '%Value%';s
اون S آخر فقط براي نمايش صحيح جمله گذاشته شده
value رشته مورد جستجو مي باشد
مثل اين که منظورم رو متوجه نشديد
من نمي خوام فقط در جدول بانک جستجو کنم ، مي خوام توي يک رشته جستجو کنم و جستجو ترکيبي از همه انواع باشه ، مثل عباراتي که در گوگل جستجو مي کنيد ، لطفا پست 1 و 6 رو بخونيد متوجه منظورم مي شويد

b.mahsa
شنبه 08 خرداد 1389, 23:00 عصر
فکر میکنم باید از تابع جستجوی یک رشته در یک رشته دیگر استفاده کنید. برای جستجوی هر کلمه یه مقدار boolean در نظر بگیرین. در صورت یافتن اون زیر رشته تو رشته مقداره true رو برگردون . بعد اگر بین کلمات کاربر یا گذاشت شما هم بین boolian هات یا بذار . اگر and گذاشت شما هم and بذار.
امید وارم این راه جواب بده.

ashkan209
یک شنبه 09 خرداد 1389, 08:46 صبح
تمام اين کلمات

select * from tablename where fieldname="SearchString"
برخي از حروف

select * from tablename where fieldname like "%SearchString%"
بدون اين کلمات

select * from tablename where fieldname<>"SearchString"
اگر یک مجموعه کلمه منظورتونه که توی جستجو بیان

select * from tablename where fieldname in {word1,word2,...}
اگر یک مجموعه کلمه منظورتونه که توی جستجو نیان

select * from tablename where fieldname not in {word1,word2,...}

Hossis
یک شنبه 09 خرداد 1389, 11:52 صبح
با تشکر وافر از آقا اشکان
راهنماييهاتون بسيار جالب و کارساز بود فقط يک نکته ديگه هم ذهن من رو مشغول کرده و اينه که اگر ترکيبي از موارد فوق باشد چجوري جستجو کنيم يعني يک تعداد کلمه را بخواهيم در عين حال که يک تعداد کلمه درون اون نباشه و برخي هم به صورت «يکي از اين کلمات» باشه و همه اين ها در يک جستجو انجام بشه ؟؟
فکر کنم بايد دستور رو تکرار کرده و کلمه And رو بين اونها گذاشت مثل

Select Matn From Table1 where matn like %Str1% and matn in (Word1,word2...) and matn <> word3 ...

Hossis
یک شنبه 09 خرداد 1389, 11:59 صبح
فکر میکنم باید از تابع جستجوی یک رشته در یک رشته دیگر استفاده کنید. برای جستجوی هر کلمه یه مقدار boolean در نظر بگیرین. در صورت یافتن اون زیر رشته تو رشته مقداره true رو برگردون . بعد اگر بین کلمات کاربر یا گذاشت شما هم بین boolian هات یا بذار . اگر and گذاشت شما هم and بذار.
امید وارم این راه جواب بده.
راه حل شما درست است ولي نمي‌توان در کد نويسي که ورودي کاربر رو وارد کرد يعني کلمات And و Or رو نمي‌شه به اختيار کاربر گذاشت :


if MyStr.contains(strfind) And mystr.contains(strfind1) then
...
end if

مگر اين که آرايه اي رشته اي درست کرده و کاراکتر جداگانه را همان "+" که نشانه تمام کلمات و "|" که نشانه يکي از کلمات و """ را که نشانه عبارت دقيق است قرار دهيم و بعد به جستجو بپردازيم.

ashkan209
یک شنبه 09 خرداد 1389, 12:16 عصر
اگر ترکيبي از موارد فوق باشد چجوري جستجو کنيم يعني يک تعداد کلمه را بخواهيم در عين حال که يک تعداد کلمه درون اون نباشه و برخي هم به صورت «يکي از اين کلمات» باشه و همه اين ها در يک جستجو انجام بشه ؟؟
آره ، همین چیزهایی که میگین را بصورت and و or و ... با الگوهایی که براتون نوشتم ، بنویسین