PDA

View Full Version : الگوریتمی برای جستجو



nassim_20
سه شنبه 12 تیر 1386, 12:22 عصر
دوستان سلام
ببخشید اگه سوالم تکراری است من خیلی جستجو کردم ولی تایپیکی که در رابطه با سوال من بود پیدا نکردم
سوال من اینه:
می خواهم در یک بانک که فعلا با پارادوکس است و بعدا میشه Accsrss
عملیات جستجو را انجام دهم بدین صورت که:
من سه جدول مختلف با فیلدهای مشابه دارم یکی ازفیلدها به نام Matn است که از نوع Memo است من می خواهم کلمه ای را جستجو کنم که هر جایی که این کلمه در این فیلدها باشد را نمایش دهد و حتی در هر بانکی (حتی اگه مجبور باشم یک بانک)
مثلا کلمه "کتاب" رو می خواهم در تمام رکوردهایی که در فیلد Matn آنها این کلمه موجود است را نمایش دهد (شماره رکورد کافی است)
در ضمن تعداد رکوردهای من بیش از 10000 تا است و سرعت هم بالطبع مهم
و نیز مطالب من فارسی هستند.
و سوال دیگه اینکه :
آیا پارادوکس می تونه برای اینکار مفید باشه با توجه به این که رکوردها ثابت هشتند و کاربر نمی تونه ویرایش و یا اظافه کنه فقط کاربر حق خواندن از بانک رو داره.

m-khorsandi
سه شنبه 12 تیر 1386, 13:08 عصر
اصولاً کسی پیشنهاد نمیکنه که از پارادوکس استفاده کنید، ولی برای 10000 رکورد و کمی بیشتر از این هم نباید مشکلی پیش بیاد. برای جستجوی فیلد متن هم میتونید از دستورات معمول SQL-92 استفاده کنید.

nassim_20
سه شنبه 12 تیر 1386, 13:26 عصر
اصولاً کسی پیشنهاد نمیکنه که از پارادوکس استفاده کنید، ولی برای 10000 رکورد و کمی بیشتر از این هم نباید مشکلی پیش بیاد. برای جستجوی فیلد متن هم میتونید از دستورات معمول SQL-92 استفاده کنید.


منظورتان استفاده از دستورات select یا like است؟
اگه مثالی در این رابطه بزنید ممنون میشوم
البته دقت کنید که قرار است کلمه مورد در نظر در تمام رکوردها در فیلدMatn جستجو شود مثلا در 10000 رکورد ( و شاید هم دوبرابر این تعداد)به نظر شما این کار بهینه است
البته من خودم راهی که به نظرم رسید اینست که بصورت دستی یک بانک ایندکس بسازم و تک تک کلمات رو در بانک وارد کنم( البته از درج کلمات تکراری خودداری می کنم) و در فیلد دیگری شماره رکوردی که کلمه مورد نظر در ان می باشد را بیاورم و با توجه به شماره رکورد در بانک ایندکس مستقیما ان رکورد را از بانک اصلی فراخوانی کنم و فیلد Matn ان را در یک Richedit قرار دهم و با استفاده از دستور Find مربوط به Richedit کلمه را بیابم و رنگی کنم.
مزیت این روش سرعت ان است و عیبش افزونگی و با توجه به این که اطلاعات من زیاد است مقرون به صرفه نیست

راستی تگ مربوط به نقل قول چیه؟

m-khorsandi
سه شنبه 12 تیر 1386, 18:50 عصر
منظورتان استفاده از دستورات select یا like است؟
بله.


Select matn
from bank
where matn like '%test%'




البته دقت کنید که قرار است کلمه مورد در نظر در تمام رکوردها در فیلدMatn جستجو شود مثلا در 10000 رکورد ( و شاید هم دوبرابر این تعداد)به نظر شما این کار بهینه است
10000 رکورد زیاد نیست، هر چند که با پارادوکس کار میکنی و گفتی که در آینده .Access


مزیت این روش سرعت ان است و عیبش افزونگی و با توجه به این که اطلاعات من زیاد است مقرون به صرفه نیست
به نظر من 10000 رکورد اصلاً زیاد نیست. روش خوبی ست با توجه به اینکه تعداد رکوردهات قرار هست که ثابت باشد. من از این روش قبلاً استفاده کردم.

این هم راهنمای استفاده از تگ‌ها (http://www.barnamenevis.org/forum/misc.php?do=bbcode)

nassim_20
سه شنبه 12 تیر 1386, 21:06 عصر
درست است که رکوردها زیاد نیست منتها متن درون هر رکورد زیاد است همانطور که گفتم رکورد من از نوع memo است و ممکن است به 1 مگا هم برسه
به این حال به نظر شما همان بانک ایندکس مناسب است از نظر افزونگی اطلاعات کار درستی است

m-khorsandi
چهارشنبه 13 تیر 1386, 08:00 صبح
ممکن است به 1 مگا هم برسه
10000 رکورد داری، با فرض اینکه 1/10 اونها هم فیلد متنشون حاوی 1 مگابایت اطلاعات باشه، اون موقع فایلی با 1 گیگابایت اطلاعات داری. با این شرایط پیشنهاد نمی‌کنم که از پارادوکس استفاده کنی.

gp.ehsan
سه شنبه 19 آذر 1387, 07:27 صبح
:متعجب::قلب::قلب::قلب::قلب::قل :
بله.


Select matn
from bank
where matn like '%test%'


10000 رکورد زیاد نیست، هر چند که با پارادوکس کار میکنی و گفتی که در آینده .Access

به نظر من 10000 رکورد اصلاً زیاد نیست. روش خوبی ست با توجه به اینکه تعداد رکوردهات قرار هست که ثابت باشد. من از این روش قبلاً استفاده کردم.

این هم راهنمای استفاده از تگ‌ها (http://www.barnamenevis.org/forum/misc.php?do=bbcode)
:قلب::شیطان::گریه: