PDA

View Full Version : سوال: FullText Structure



shafagh_82
سه شنبه 18 خرداد 1389, 10:06 صبح
سلام دوستان! من میخوام یه چیزی شبیه به پروسه ایندکس کردن دیتاها توسط موتورهای جستجوگر رو روی یه سری دیتایی که دارم انجام بدم و برای این کار میخوام اول از ساختار و روش کار ایندکس کردن FullText در اسکیوال سر دربیارم و ببینیم روش کارش چطور هست و اگر بشه از همون الگوبرداری کنم! آیا کسی در این زمینه مقاله, یا اطلاعات مفیدی داره در اطلاعات من قرار بده؟

sia_2007
سه شنبه 18 خرداد 1389, 11:49 صبح
apress pro full text search
من خودم تو پروژه پایانیم ازش استفاده کردم
خیلی امکان خوبیه

Adobe iFilter 6

رو هم دانلود کن

shafagh_82
سه شنبه 18 خرداد 1389, 14:05 عصر
سلام! با تشکر از پاسخ شما!
این که نوشتید چی هست؟ من خیلی متوجه نشدم! میشه یه کم بیشتر توضیح بدید!
apress pro full text search چی هست؟
شما در پروژه پایانیتون موتور جستجو نوشتید؟

sia_2007
سه شنبه 18 خرداد 1389, 19:38 عصر
سرویس Database Engine در SQL Server؛ یک سرویس جانبی دارد به نام Full Text Search
این سرویس با توجه به تعریفی که DLL هایش بهش میدهند؛ داخل فایلها را میگردد؛ و متون آنها را در میآورد و به صورت ایندکس شده ذخیره میکند.
سپس شما آن ایندکس ها را میگردید؛ که در واقع دارید فایلهایتان را میگردید.
شما باید برای هر فایلی که DLL آن موجود نیست؛ به هر نحوی DLL ای رو پیدا و به SQL Server اظافه کنید.
مثلا برای جستجوی فایلهای pdf؛ شما نیاز به Adobe iFilter دارید.
با نصب iFilter؛ Full Text Search میتونه داخل pdf ها رو بگرده و ایندکسشون کنه و شما راحت داخل فایلهاتون رو بگردید.
apress pro full text search؛ یک کتاب از انتشارات apress است.

Full Text Search بخش کوچیکی از پروژه من بود که توش از

Silverlight
WCF
Entity Framework
LINQ to Entities
.Net Framework 4
Reporting Service

استفاده کردم.

shafagh_82
چهارشنبه 19 خرداد 1389, 10:41 صبح
سلام! از پاسخ شما ممنونم! ولی من احساس می کنم کمی منظورم رو درست منتقل نکردم!
من میخوام یه چیزی شبیه به موتور جستجو بنویسم و برای این کار گفتم بهتره دنبال این باشم که از ساختار داخلی یه موتور جستجوگر که سرعت خوبی داره مثل FullText سردربیارم! یعنی من میخوام بدونم که FullText دقیقا سر دیتای ورودی خودش - که در اینجا فرض رو بر این میذاریم که دیتای ورودی اون داده خام داخل یک جدول هستند - چه بلایی می آره اونها رو چطور ذخیره می کنه و موقع جستجو چطور عبارت مورد نظر رو پیدا می کنه؟ می خوام دقیقا کاری که اون انجام می ده با سی شارپ بنویسم! مثلا اون به ازای هر کاراکتر مکان مورد نظر اون کاراکتر رو ذخیره می کنه مثلا میگه عبارت الف یه بار تو این سطر اومده و یه بار تو اون سطر تو اون مکان و .... یا بر مبنای کلمات کار می کنه یا ....
شما میتونید کمکی به من بکنید؟:قلب:

AminSobati
چهارشنبه 19 خرداد 1389, 10:55 صبح
سلام دوست عزیزم،
بصورت خیلی کلی، جمله ها خورد میشن، به کمک Space هر لغت مشخص میشه و PK اون کلمه هم مشخص میکنه که این کلمه در کدوم رکورد قرار داره. پس وقتی کلمه رو جستجو میکنید، میتونه از روی PK تشخیص بده که کدوم رکورد رو باید برای شما بیاره. اما این توضیح خیلی کلی بود و برای زبانهای مختلف قوائد پیچیده ای اعمال میشه

shafagh_82
چهارشنبه 19 خرداد 1389, 11:55 صبح
از پاسخ شما ممنونم دوست عزیز
من میدونم که برای اینکه بدونه کدوم کلمه تو کجا قرار داره با کلید اصلی اون کلمه رو پیدا می کنه و خودم هم برای آدرس دهی یک کلمه در پروژه مورد نظرم مشکلی ندارم در واقع این بخش نسبتا ساده کار هست! بخش مشکل کار این هست که ما چطور باید اون کلمه رو با سرعت مناسب پیدا کنیم و در عین حال حجم دیتایی که برای این کار می سازیم خیلی زیاد نباشه! این که شما می گید کلمه ها با Space خرد میشن: مثلا فرض کنید عبارت "سلام دوست عزیز" رو در نظر بگیریم من این عبارت رو با Space می شکنم و میگم عبارت سلام در این آدرس و عبارت دوست در این آدرس و عبارت عزیز در این آدرس قرار داره و موقعی که کاربر عبارت سلام رو وارد کرد می رم سراغ اون آدرس و بهش نشون میدم!
ولی مساله این است که اگر کاربری عبارت "سلا" رو وارد کنه این جمله ای که من وارد کردم جزو پاسخ های جستجوی اون به حساب می آد ولی با روش ساده ای که ما گفتیم جمله ما جزو پاسخ اون نمایش داده نمیشه چون این فقط بخشی ازعبارت سلام بود که من ذخیره کردم! آیا Fulltext تمام جایگشت های مختلف اون عبارت رو هم در نظر می گیره:
مثلا برای عبارت سلام حالات "س" و "سل" و "سلا" و "سلام" و "ل" و "لا" و "لام" و "ا" و "ام" و "م" :گیج::گیج::گیج:رو برای این عبارت مورد نظر ذخیره می کنه یا کلا فقط کاراکترهای پایه اون زبان مثلا زبان فارسی رو در نظر می گیره و تعداد تکرار اونها رو در تمام متن ذخیره می کنه و موقع جستجو با چسباندن آدرسهای پشت سر هم عبارت مورد نظر رو پیدا می کنه یا ..... یا .... یا ...... یا ......:متفکر::متفکر::متفکر:

shafagh_82
چهارشنبه 19 خرداد 1389, 14:57 عصر
راستی یه جا دیدم نوشته بود که:


Full Text Index اندیسی token based است که بوسیله Microsoft Full Text Engine for SQL یا MSFTESQL ایجاد و نگهداری می شود . عملیات ساخت Full Text Index با دیگر انواع اندیس ها متفاوت است . به جای ایجاد یک ساختار B-Tree بر مبنای محتوای سطرها ، MSFTESQL بر مبنای token های جدا شده از متن جدولی جداگانه تشکیل می دهد .

به نظر شما منظورش از token چیه؟
به نظر شما میشه از ساختار داخلیش به طور دقیق سر در آورد؟ یا نحوه کارکرد اینا یه مقدار Secret هست؟:لبخند:
ممنون

sia_2007
چهارشنبه 19 خرداد 1389, 15:53 عصر
کتابی که معرفی کردم خیلی خوب توضیح داده؛ حتی نحوه توسعه اون رو هم آموزش داده؛
حیفم میآد همون مطالب رو به صورت ناقص بیارم؛ در حالی که کتاب به خوبی پوشش داده.

AminSobati
چهارشنبه 19 خرداد 1389, 17:14 عصر
ضمن اینکه مطالعه کتاب یاد شده رو بهتون توصیه میکنم، در نظر بگیرید که ایندکس وقتی میتونه به بهترین نحوه به کوئری کمک کنه که ابتدای کلمه مشخص باشه. مثلا جستجوی "سلا*" مثل "سلام" انجام میشه اما جستجوی "*لام" کاملا متفاوته و ممکنه زمان قابل توجهی صرف کنه

sia_2007
چهارشنبه 19 خرداد 1389, 20:38 عصر
البته ایندکس Full Text Search کمی پیشرفته تر از این حرفهاست.
مثلا شما میتوانید با جستجوی Happy ؛ بخواهید که مترادفهای آن هم بیایند.
مثلا Happiest ؛ Happily و ...
در ضمن یک جستجوی روی یک فیلد متنی با ایندکس Full Text Search ؛ خیلی سریع تر از جستجوی یک فیلد متنی با ایندکس معمولی است.
در ضمن شما میتوانید کلماتی که به درد جستجو هم میخورند رو ایندکس نکنه.
مثلا as و a و ...

shafagh_82
پنج شنبه 20 خرداد 1389, 07:59 صبح
سلام! از جوابهاتون ممنونم!
البته سوء تفاهم نشه من تا این حد دقیق نمی خوام که تمام مترادفات اون کلمه رو هم بده! من یه جستجوی معمولی کلمات رو میخوام! دقیقا در حد همون مثالی که گذاشتم! ولی چون فایل ایندکسی که من می سازم قراره توسط یه برنامه موبایل استفاده بشه بهتره راهکاری پیدا بشه که حافظه زیادی گرفته نشه و سرعت جستجو هم بالا باشه! من فقط یه راهکار مناسب میخوام برای اینکه بدونم کلماتم رو چطور ذخیره کنم که با سرعت بازیابی کنم!
راستی این کتابی که شما گذاشتید کلش قابل دانلوده؟ ظاهرا کتابش فروشی هست و من فصل اولش رو تونستم دانلود کنم! هنوز نخوندمش همون کافیه یا باید کل کتاب رو پیدا کنم؟ البته من کارم کمی Force زمانی داره و واقعا وقت ندارم یه کتاب رو بخونم تا به یه راهکار برسم! اگه در همین حدی که مثال زدم بتونید منو راهنمایی کنید ممنون میشم!:قلب:

sia_2007
پنج شنبه 20 خرداد 1389, 10:48 صبح
دوست عزیز؛ iTFS یک تابع دارد که بسیار انعطاف پذیر و است و این فقط یک مثال بود.
در مورد موبایل قضیه فرق میکنه.
بهتره از افراد دیگه ای بپرسید.
شاید مثلا ما یه دیتابیس تحت گوشی داشته باشیم.
کلا قضیش خیلی فرق میکنه.

shafagh_82
پنج شنبه 20 خرداد 1389, 11:32 صبح
سلام!
من تمام کارهایی رو که برای لود دیتا روی موبایل داشتم با فایل باینری انجام دادم و تا اینجا کارش خوب پیش رفته! در صدد بودم که برای ایندکس کردن دیتاها هم اطلاعات مربوط به ایندکس رو در قالب یک فایل باینری ببرم روی موبایل و برای همین دنبال جزییات پروسه ایندکس کردن بودم!
به هر حال از توجهتون بسیار ممنونم دوست عزیز!:لبخندساده::لبخندساده:

shafagh_82
سه شنبه 08 تیر 1389, 13:39 عصر
سلام دوستان! ممنون میشم اگه به این سوالم جواب بدید!
به نظر شما فایل ایندکسی رو که FullText میسازه میشه مستقیم توسط برنامه سی شارپ استفاده کرد؟ منظورم اینه که تصور کنید ما در برنامه ای که قراره بنویسیم دسترسی به دیتابیس نداریم و قراره یه بار دیتاهامون توسط FullText ایندکس بشه و بعد خروجی اون رو برداریم و در برنامه ای که قراره بنویسیم یه جور به این خروجی تولید شده توسط زبان سی شارپ کویری بدیم! راهی برای این کار وجود داره یا نه؟:متفکر:

shafagh_82
پنج شنبه 10 تیر 1389, 07:28 صبح
کسی نمیتونه کمکی به من بکنه!:افسرده: