mhsn_Danger
چهارشنبه 20 دی 1391, 16:41 عصر
بسم الله الرحمن الرحیم
اللهم عجل لولیک الفرج
با سلام خدمت همگی
چون مبحث FullText Search خیلی جذاب و کارا هست مناسب دبدم دست نوشته ای در این باره در سایت قرار بدم شاید به درد کسی خورد و ازش استفاده کرد.
در اینجا از SQL Server و برای ذخیره ی فایل ها از C# استفاده میکنیم.
آموزشی که قرار دادم درباره ی ذخیره ی فایل های pdf در بانک اطلاعاتی و جستجو در بین آنها با استفاده از ویژگی Full Text Search هست.
ابتدا باید بدونیم :
امکان index کردن و جستجوی دیتای متنی را بر مبنای لغات کلیدی در SQL Server فراهم می کند . بر خلاف LIKE که محدوده عمل آن روی کاراکترهاست ، Full Text Search بر روی کلمات بر مبنای زبان ِ متن ، پرس و جو انجام می دهد . اختلاف سرعت Full Text Search و LIKE در زمانی که می خواهیم یک Query را بر روی چند میلیون رکورد اجرا کنیم بسیار مشهود است . اگر با LIKE دنبال یک ترکیب بگردیم ، تهیه گزارش ممکن است چندین دقیقه طول بکشد در حالی که استفاده از Full Text Search آن را به چند ثانیه کاهش می دهد .
توضیح بالا رو از سایت آقای حـــــامد بنـــایـــــی (http://hamedb.com/fa/posts/items/full_text_search_index_871016.aspx) آوردم!!
و اینکه باید IFilter مربوط به هر نوع فایلی را به sql server معرفی کرد. یک سری از فایل ها مثل .aspx, .doc و ... رو به طور پیش فرض ساپورت می کند و لی برای فایل های pdf ما باید Adobe IFIlter و یا Foxit IFilter رو به sqlserverمعرفی کنیم.
من با Foxit IFIlter کار می کنم.(پیکر بندی و بهتر بگم نصب اون فرقی با adobe نداره)ابتدا باید بانک و جداول مربوط به اون رو بسازیم.
پس اول بانک اطلاعاتی خودمون رو در محیط Sql Management Studio می سازیم.
یک جدول با فیلدهای مورد نیاز داخل بانک درست می کنیم که باید حداقل فیلدهای زیر رو داشته باشد.
Id که باید PrimaryKey تعیین بشه.
Pdfکه باید از نوعvarBinary(MAX) باشه که محتویات فایل pdf ما رو نگهداری می کنه.
Ext که پسوند فایل ما رو نگهداری می کنه. یعنی ما می تونیم از همین جدول برای نگهداری از چند نوع فایل استفاده کنیم. ولی باید پسوند فایل مورد نظر رو در این فید ذخیره کنیم. ما در اینجا برای تمام رکوردهامون از پسوند .pdf استفاده خواهیم کرد. من از نوع varchar(50) گرفتم این فیلد رو.(نخندید؛ به امید روزیکه پسوند فایل ها 50 تایی هم بشه!!!)
حالا باید Foxit IFilter رو نصب کنیم. از این (http://www.foxitsoftware.com) آدرس می تونید IFilter مخصوصFoxit رو دانلود و نصب کنید. البته لایسنسش 30 روزه هست.(اگه کسی کرکش کرد یا کرکشو پیدا کرد بذاره. اگه هم
Adobe IFilter روکسیمیتونه مستقیم همین جا Upload کنه که عالی میشه) و البته منتظر هیچگونه محیط ویژوال برای اون نباشید چون فقط یک سری dll ها هست که کمکsql server برای جستجو میکند.
بعد از نصب IFIlter مربوطه باید اون رو رجیستر کنیم. که با دو خط کد زیر این کار انجام می شود:
Exec sp_fulltext_service 'load_os_resources', 1
Exec sp_fulltext_service 'verify_signature', 0
می تونید این دو خط رو در یک پروسیجر قرار بدید و ازش استفاده کنید.
حالا باید سرویس sql Server رو Restart کنید.
در مسیر زیر :
lick Start > Programs > Microsoft SQL Server 2005 > Configuration Tools > SQL
Server Surface Area Configuration
می تونید سرویس مربوط به sql و full text search رو Restart کنید.
حالا با کد زیر مطمئن شوید که کار رجیستر شدن IFilter صحیح انجام شده:
select document_type, path from sys.fulltext_document_types where document_type = '.pdf'
حاصل کوئری بالا باید شبیه تصویر زیر باشد
حالا باید تنظیمات بانک رو برای استفاده از Full Text Search انجام بدهیم. اول باید ببینیم که این ویژگی رو نصب کردیم یا نه. کد زیر به ما کمک میکن و اگر مقدار 1 را برگرداند یعنی این ویژگی فعال است و اگر 0 را برگرداند یعنی نصب نشده.
print FULLTEXTSERVICEPROPERTY('IsFullTextInstalleds’)
اگر نصب نبود باید Component و Service رو نصب کنید.
وقتی از نصب بودن اون مطمئن شدیم باید این ویژگی رو فعال کنیم. دستور زیر این کار رو انجام می دهد.
exec sp_fulltext_database 'enable'
حالا بایذ یک full text Catalog ایجاد کنیم البته با دستور زیر:
create fulltext catalog MyCatalog
ما باید یک Unique Index ایجاد کنیم که با قرار دادن فیلد Id به عنوان Primary Key قبلا این کار انجام شده بود.
مرحله بعد اینه که ما Full Text Index رو ایجاد کنیم. کد زیر این کار رو برای ما انجام میدهد.
create fulltext index on dbo. pdftable (Pdf)
key index ui_pdfIndex on pdfCatalog
with change_tracking auto
البته تمام مراحل بالا رو میتونیم با استفاده از محیط خود Management Studio هم انجام داد.
برای جستجو ما یک پروسیجر می نویسیم که شبیه کد زیر هست.
SELECT Id,Title from pdftable Where Contains(Pdf,@item)
خوب الآن بانک ما برای استفاده از Full Text Search آماده هست.
اگه مشکلی نیست، ادامه بدیم.
اللهم عجل لولیک الفرج
با سلام خدمت همگی
چون مبحث FullText Search خیلی جذاب و کارا هست مناسب دبدم دست نوشته ای در این باره در سایت قرار بدم شاید به درد کسی خورد و ازش استفاده کرد.
در اینجا از SQL Server و برای ذخیره ی فایل ها از C# استفاده میکنیم.
آموزشی که قرار دادم درباره ی ذخیره ی فایل های pdf در بانک اطلاعاتی و جستجو در بین آنها با استفاده از ویژگی Full Text Search هست.
ابتدا باید بدونیم :
امکان index کردن و جستجوی دیتای متنی را بر مبنای لغات کلیدی در SQL Server فراهم می کند . بر خلاف LIKE که محدوده عمل آن روی کاراکترهاست ، Full Text Search بر روی کلمات بر مبنای زبان ِ متن ، پرس و جو انجام می دهد . اختلاف سرعت Full Text Search و LIKE در زمانی که می خواهیم یک Query را بر روی چند میلیون رکورد اجرا کنیم بسیار مشهود است . اگر با LIKE دنبال یک ترکیب بگردیم ، تهیه گزارش ممکن است چندین دقیقه طول بکشد در حالی که استفاده از Full Text Search آن را به چند ثانیه کاهش می دهد .
توضیح بالا رو از سایت آقای حـــــامد بنـــایـــــی (http://hamedb.com/fa/posts/items/full_text_search_index_871016.aspx) آوردم!!
و اینکه باید IFilter مربوط به هر نوع فایلی را به sql server معرفی کرد. یک سری از فایل ها مثل .aspx, .doc و ... رو به طور پیش فرض ساپورت می کند و لی برای فایل های pdf ما باید Adobe IFIlter و یا Foxit IFilter رو به sqlserverمعرفی کنیم.
من با Foxit IFIlter کار می کنم.(پیکر بندی و بهتر بگم نصب اون فرقی با adobe نداره)ابتدا باید بانک و جداول مربوط به اون رو بسازیم.
پس اول بانک اطلاعاتی خودمون رو در محیط Sql Management Studio می سازیم.
یک جدول با فیلدهای مورد نیاز داخل بانک درست می کنیم که باید حداقل فیلدهای زیر رو داشته باشد.
Id که باید PrimaryKey تعیین بشه.
Pdfکه باید از نوعvarBinary(MAX) باشه که محتویات فایل pdf ما رو نگهداری می کنه.
Ext که پسوند فایل ما رو نگهداری می کنه. یعنی ما می تونیم از همین جدول برای نگهداری از چند نوع فایل استفاده کنیم. ولی باید پسوند فایل مورد نظر رو در این فید ذخیره کنیم. ما در اینجا برای تمام رکوردهامون از پسوند .pdf استفاده خواهیم کرد. من از نوع varchar(50) گرفتم این فیلد رو.(نخندید؛ به امید روزیکه پسوند فایل ها 50 تایی هم بشه!!!)
حالا باید Foxit IFilter رو نصب کنیم. از این (http://www.foxitsoftware.com) آدرس می تونید IFilter مخصوصFoxit رو دانلود و نصب کنید. البته لایسنسش 30 روزه هست.(اگه کسی کرکش کرد یا کرکشو پیدا کرد بذاره. اگه هم
Adobe IFilter روکسیمیتونه مستقیم همین جا Upload کنه که عالی میشه) و البته منتظر هیچگونه محیط ویژوال برای اون نباشید چون فقط یک سری dll ها هست که کمکsql server برای جستجو میکند.
بعد از نصب IFIlter مربوطه باید اون رو رجیستر کنیم. که با دو خط کد زیر این کار انجام می شود:
Exec sp_fulltext_service 'load_os_resources', 1
Exec sp_fulltext_service 'verify_signature', 0
می تونید این دو خط رو در یک پروسیجر قرار بدید و ازش استفاده کنید.
حالا باید سرویس sql Server رو Restart کنید.
در مسیر زیر :
lick Start > Programs > Microsoft SQL Server 2005 > Configuration Tools > SQL
Server Surface Area Configuration
می تونید سرویس مربوط به sql و full text search رو Restart کنید.
حالا با کد زیر مطمئن شوید که کار رجیستر شدن IFilter صحیح انجام شده:
select document_type, path from sys.fulltext_document_types where document_type = '.pdf'
حاصل کوئری بالا باید شبیه تصویر زیر باشد
حالا باید تنظیمات بانک رو برای استفاده از Full Text Search انجام بدهیم. اول باید ببینیم که این ویژگی رو نصب کردیم یا نه. کد زیر به ما کمک میکن و اگر مقدار 1 را برگرداند یعنی این ویژگی فعال است و اگر 0 را برگرداند یعنی نصب نشده.
print FULLTEXTSERVICEPROPERTY('IsFullTextInstalleds’)
اگر نصب نبود باید Component و Service رو نصب کنید.
وقتی از نصب بودن اون مطمئن شدیم باید این ویژگی رو فعال کنیم. دستور زیر این کار رو انجام می دهد.
exec sp_fulltext_database 'enable'
حالا بایذ یک full text Catalog ایجاد کنیم البته با دستور زیر:
create fulltext catalog MyCatalog
ما باید یک Unique Index ایجاد کنیم که با قرار دادن فیلد Id به عنوان Primary Key قبلا این کار انجام شده بود.
مرحله بعد اینه که ما Full Text Index رو ایجاد کنیم. کد زیر این کار رو برای ما انجام میدهد.
create fulltext index on dbo. pdftable (Pdf)
key index ui_pdfIndex on pdfCatalog
with change_tracking auto
البته تمام مراحل بالا رو میتونیم با استفاده از محیط خود Management Studio هم انجام داد.
برای جستجو ما یک پروسیجر می نویسیم که شبیه کد زیر هست.
SELECT Id,Title from pdftable Where Contains(Pdf,@item)
خوب الآن بانک ما برای استفاده از Full Text Search آماده هست.
اگه مشکلی نیست، ادامه بدیم.