ارسال پاسخ 
 
امتیاز موضوع:
  • 1 رأی - میانگین امتیازات: 5
  • 1
  • 2
  • 3
  • 4
  • 5
ایجاد Full Text Search در SQL Server
03-16-2015, 02:27 AM (آخرین ویرایش در این ارسال: 12-15-2015 08:06 PM، توسط ali.)
ارسال: #1
ایجاد Full Text Search در SQL Server
ایجاد فول تکست سرچ در اس کیو ال سرور
Full Text Search امکان index کردن و جستجوی دیتای متنی را بر مبنای لغات کلیدی در SQL Server فراهم می کند . بر خلاف LIKE که محدوده عمل آن روی کاراکترهاست ، Full Text Search بر روی کلمات بر مبنای زبان ِ متن ، پرس و جو انجام می دهد . اختلاف سرعت Full Text Search و LIKE در زمانی که می خواهیم یک Query را بر روی چند میلیون رکورد اجرا کنیم بسیار مشهود است . اگر با LIKE دنبال یک ترکیب بگردیم ، تهیه گزارش ممکن است چندین دقیقه طول بکشد در حالی که استفاده از Full Text Search آن را به چند ثانیه کاهش می دهد. دستور LIKE نمی تواند درون ستون های باینری جستجو کند. query های حاوی LIKE در متن های با حجم بالا بسیار کندتر از Full-Text Search اجرا می شود.
برای جستجو در متنهای حجیم از Full-Text Search استفاده می شود. Full-Text Search از قابلیتهای برجسته SQL Server می باشد. جستجوی یک عبارت در پایگاه داده امری ضروری برای اکثر برنامه‌های تحت وب است. این امر به سادگی با یک کوئری شبیه:
کد:
SELECT * FROM `myTable` WHERE `text` LIKE '%زیتون%'
قابل انجام است.
اما زمانی که تعداد رکوردهای ما زیاد باشد و دیتابیس ما سنگین باشد (مثلا 5 میلیون رکورد در یک جدول داشته باشیم) آنگاه جستجوی یک عبارت ساده نیز بسیار زمان‌بر خواهد بود. برای این منظور از قابلیت Full Text Search در SQL Server استفاده می نماییم که مراحل فعال سازی و انجام تنظیمات آن به شرح ذیل می باشد.
ابتدا یک جدول ایجاد می نماییم و تعدادی رکورد تصادفی در آن درج می نماییم.
کد:
CREATE TABLE [dbo].[tblBooks0](
    [BookIS] [int] IDENTITY(1,1) NOT NULL,
    [BooksTitle] [nvarchar](255) NOT NULL,
CONSTRAINT [PK_tblBooks] PRIMARY KEY CLUSTERED
(
[BookIS] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]
GO

[تصویر:  6356210438957844140FT10001.jpg]
در مرحله بعدی نوبت به ایجاد FULLTEXT STOPLIST می باشد. برای این منظور هم می توان از طریق کد نویسی عمل نمود و هم از طریق ویزارد.
کد:
CREATE FULLTEXT STOPLIST StopListName;
GO
مثال:
CREATE FULLTEXT STOPLIST BooksStopList;
GO

[تصویر:  6356210459224678580FT10002.jpg]

[تصویر:  6356210471349552250FT10003.jpg]

پس از ایجاد Full text Stoplist خالی بایستی کلمه هایی که می خواهیم در جستجو اعمال نشوند به لیست اضافه نماییم. برای این منظور نیز دو راه وجود دارد. یکی از طریق کد نویسی SQL و دیگری از طریق ویزاردهای خود برنامه.

[تصویر:  6356210709620502960FT10004.jpg]

شکل کلی دستور برای درج کلمه ای که نمی خواهیم در جستجو مورد توجه قرار گیرد:

کد:
ALTER FULLTEXT STOPLIST [StopListName] ADD 'کلمه مورد نظر' LANGUAGE 'Arabic';

شکل کلی دستور برای حذف یک کلمه که در Stop List از قبل موجود می باشد:

کد:
ALTER FULLTEXT STOPLIST [StopListName] DROP 'کلمه مورد نظر' LANGUAGE 'Arabic';

شکل کلی دستور برای حذف کلیه کلمه های موجود در Stop List:

کد:
ALTER FULLTEXT STOPLIST [StopListName] DROP ALL LANGUAGE 'Arabic';

با استفاده از این دستور کلیه لغتهایی که با زبان عربی در Stop List درج شده اند حذف می شوند.
درج یک سری کلمه در Stop List مربوط به دیتا بیس کتابخانه با عنوان tblBooks0

کد:
ALTER FULLTEXT STOPLIST [BooksStopList] ADD 'به' LANGUAGE 'Arabic';
ALTER FULLTEXT STOPLIST [BooksStopList] ADD 'است' LANGUAGE 'Arabic';
ALTER FULLTEXT STOPLIST [BooksStopList] ADD 'کجا' LANGUAGE 'Arabic';
ALTER FULLTEXT STOPLIST [BooksStopList] ADD 'و' LANGUAGE 'Arabic';
ALTER FULLTEXT STOPLIST [BooksStopList] ADD 'شد' LANGUAGE 'Arabic';

برای مشاهده تعداد Stop List های موجود در یک پایگاه داده از کد SQL زیر استفاده می شود:

کد:
select * from sys.fulltext_stoplists

[تصویر:  6356210737723430130FT10005.jpg]


==================================================
طراحی وب سایت
پروژه های برنامه نویسی تجاری
دانلود پروژه های ASP.NET وب سایتهای آماده به همراه توضیحات
دانلود پروژه های سی شارپ و پایگاه داده SQL Server همراه توضیحات و مستندات
دانلود پروژه های UML نمودار Usecase نمودار class نمودرا activity نمودار state chart نمودار DFD و . . .
دانلود پروژه های حرفه ای پایگاه داده SQL Server به همراه مستندات و توضیحات
پروژه های حرفه ای پایگاه داده Microsoft access به همراه مستندات و توضیحات
دانلود پروژه های کارآفرینی
دانلود گزارشهای کارآموزی کارورزی تمامی رشته های دانشگاهی
قالب تمپلیت های آماده وب سایت ASP.NET به همراه Master page و دیتابیس
برنامه های ایجاد گالری عکس آنلاین با ASP.NET و JQuery و اسلایدشو به همراه کد و دیتابیس SQL کاملا Open Source واکنشگرا و ساده به همراه پایگاه داده
==================================================
یافتن تمامی ارسال‌های این کاربر
نقل قول این ارسال در یک پاسخ
03-16-2015, 02:47 AM (آخرین ویرایش در این ارسال: 03-18-2015 02:28 AM، توسط ali.)
ارسال: #2
ایجاد Full Text Search در SQL Server بخش دوم
و برای مشاهده کلمه های موجود در Stop List از کد SQL زیر استفاده می شود:

کد:
select * from sys.fulltext_stopwords

[تصویر:  6356210756673535270FT10006.jpg]

در مرحله بعدی نوبت به ایجاد یک Full Text Catalog می باشد. برای این منظور نیز دو راه وجود دارد. از طریق کد نویسی و از طریق ویزارد.

[تصویر:  6356210779817092180FT10007.jpg]

شکل کلی دستور:

کد:
CREATE FULLTEXT CATALOG CatalogName;
GO

مثال:

کد:
CREATE FULLTEXT CATALOG BooksFtCatalog;
GO

[تصویر:  6356210809189481180FT10008.jpg]

پس از ایجاد Full Text Catalog باید یک سری تنظیمات بر روی آن انجام داد.


==================================================
طراحی وب سایت
پروژه های برنامه نویسی تجاری
دانلود پروژه های ASP.NET وب سایتهای آماده به همراه توضیحات
دانلود پروژه های سی شارپ و پایگاه داده SQL Server همراه توضیحات و مستندات
دانلود پروژه های UML نمودار Usecase نمودار class نمودرا activity نمودار state chart نمودار DFD و . . .
دانلود پروژه های حرفه ای پایگاه داده SQL Server به همراه مستندات و توضیحات
پروژه های حرفه ای پایگاه داده Microsoft access به همراه مستندات و توضیحات
دانلود پروژه های کارآفرینی
دانلود گزارشهای کارآموزی کارورزی تمامی رشته های دانشگاهی
قالب تمپلیت های آماده وب سایت ASP.NET به همراه Master page و دیتابیس
برنامه های ایجاد گالری عکس آنلاین با ASP.NET و JQuery و اسلایدشو به همراه کد و دیتابیس SQL کاملا Open Source واکنشگرا و ساده به همراه پایگاه داده
==================================================
یافتن تمامی ارسال‌های این کاربر
نقل قول این ارسال در یک پاسخ
03-18-2015, 02:47 AM
ارسال: #3
ایجاد Full Text Search در SQL Server بخش سوم
[تصویر:  6356228052410279470FT10009.jpg]

و یا از طریق اسکریپت:

کد:
USE [DbBooks]
GO
CREATE FULLTEXT INDEX ON [dbo].[tblBooks0] KEY INDEX [PK_tblBooks] ON ([BooksFtCatalog]) WITH (CHANGE_TRACKING AUTO)
GO
USE [DbBooks]
GO
ALTER FULLTEXT INDEX ON [dbo].[tblBooks0] ADD ([BooksTitle] LANGUAGE [Arabic])
GO
USE [DbBooks]
GO
ALTER FULLTEXT INDEX ON [dbo].[tblBooks0] ENABLE
GO
[تصویر:  6356228066252098600FT10010.jpg]

و برای تخصیص Stoplist به جدول مورد نظر از کد زیر استفاده می نماییم:

کد:
ALTER FULLTEXT INDEX ON [dbo].[tblBooks0] SET  stoplist = BooksStopList

پس از این مرحله باید مجددا Full Text Catalog را Rebuild نمود تا تغییرات مورد نیاز بر روی جدول اعمال شود.

[تصویر:  6356228077027834160FT10011.jpg]
[تصویر:  6356228090190959030FT10012.jpg]
[تصویر:  6356228090191059051FT10013.jpg]

پس از این مرحله می توان لیستی که توسط SQL Server برای جستجو ایجاد کرده به همراه تعداد نتیجه های بدست آمده با استفاده از کد زیر مشاهده نمود:

کد:
SELECT * FROM sys.dm_fts_index_keywords  
(DB_ID('DbBooks'), OBJECT_ID('tblBooks0')) d
order by d.document_count desc

[تصویر:  6356228103880603570FT10014.jpg]

البته از کلمه هایی که تعداد نتایج بیشتری دارند نیز می توان صرفنظر نمود. (مانند 'های' و 'ها' در لیست بالا)

تفاوت در دو نوع جستجو دستورهای Like و Contains

کد:
select * from tblBooks0 b where b.BooksTitle like '%آکس%'
select * from tblBooks0 b where Contains(b.BooksTitle , '"*آکس*"')

[تصویر:  6356228126589254250FT10016.jpg]
[تصویر:  6356228123007799110FT10015.jpg]

ضمنا با استفاده از کد SQL زیر می توانید کلمه های با نتایج با لاتر را استخراج نموده و آنها را به STOP List WORD اضافه نمایید.

کد:
SELECT *  ,
'ALTER FULLTEXT STOPLIST [BooksStopList] ADD '  
+ '''' + d.display_term + '''' + ' LANGUAGE  ''Arabic'';'
SELECT *  ,
'ALTER FULLTEXT STOPLIST [BooksStopList] ADD '  
+ '''' + d.display_term + '''' + ' LANGUAGE  ''Arabic'';'
FROM sys.dm_fts_index_keywords  
(DB_ID('DbBooks'), OBJECT_ID('tblBooks0')) d
where ISNUMERIC(d.display_term) = 0 and document_count >= 500  
and d.display_term <> 'END OF FILE'
order by d.document_count desc

این کد در حقیقت کد مربوط به درج کلمه های مورد نظر به StoplistWords را تولید می کند. (مثال زیر)

کد:
ALTER FULLTEXT STOPLIST [BooksStopList] ADD 'های' LANGUAGE  'Arabic';
ALTER FULLTEXT STOPLIST [BooksStopList] ADD 'ها' LANGUAGE  'Arabic';
ALTER FULLTEXT STOPLIST [BooksStopList] ADD 'با' LANGUAGE  'Arabic';

پس از درج این کلمه ها که نتایج جستجوی بالایی دارند ، مجددا Catalog را Rebuild می نماییم تا تغییرات مورد نظر در لیست اعمال شود.
برای Rebuild کردن مجدد می توان از اسکریپت زیر استفاده نمود:

کد:
alter fulltext catalog FtName rebuild


==================================================
طراحی وب سایت
پروژه های برنامه نویسی تجاری
دانلود پروژه های ASP.NET وب سایتهای آماده به همراه توضیحات
دانلود پروژه های سی شارپ و پایگاه داده SQL Server همراه توضیحات و مستندات
دانلود پروژه های UML نمودار Usecase نمودار class نمودرا activity نمودار state chart نمودار DFD و . . .
دانلود پروژه های حرفه ای پایگاه داده SQL Server به همراه مستندات و توضیحات
پروژه های حرفه ای پایگاه داده Microsoft access به همراه مستندات و توضیحات
دانلود پروژه های کارآفرینی
دانلود گزارشهای کارآموزی کارورزی تمامی رشته های دانشگاهی
قالب تمپلیت های آماده وب سایت ASP.NET به همراه Master page و دیتابیس
برنامه های ایجاد گالری عکس آنلاین با ASP.NET و JQuery و اسلایدشو به همراه کد و دیتابیس SQL کاملا Open Source واکنشگرا و ساده به همراه پایگاه داده
==================================================
یافتن تمامی ارسال‌های این کاربر
نقل قول این ارسال در یک پاسخ
ارسال پاسخ 


پرش به انجمن:


کاربرانِ درحال بازدید از این موضوع: 2 مهمان