PDA

View Full Version : Full text index



hr110
چهارشنبه 06 اسفند 1382, 13:25 عصر
یکی از ابزارهای قدرتمندی که در اسکیو ال وجود دارد، بخش زیر را یک زمانی در سایت ایران دولوپر تایپ کرده بودم که بد ندیدم در این جا نیز دوستان به ان نظری بیندازند:


با سلام؛

یکی از امکانات جالبی که SQL Server از نسخه 7 به بالا اضافه شده است همین امکان میباشد.

در این امکان باید ابتدا کاتالوگهایی ایجاد شود و بعد از آن جداول را به این کاتالوگها اضافه نموده و در نهایت نیز باید فیلدهایی که قرار است Fulltext شوند تعیین خواهد شد. حال شما میتوانید بروی این جدول و فیلدهایی که کاندید شده اند جستجوهایی متنی کامل(full text) و یا جستجوهای مفهومی داشته باشید.

در حالت اول شما میتوانید یک عبارت و یا ترکیبی از انها را داشته باشید. و در سریعترین زمان به آن دستیابی داشته باشید ، این سرعت را من در برنامه هایم تست کرده ام و در شرایط مساوی میتواند تا 10 برابر شود

در جستجوی مفهومی نیز شما میتوانید با جملات انگلیسی از بانک اطلاعاتی سئوال کنید مثلا:"what is JAVA" و بانک اطلاعاتی جوابهای سوال شما را بصورت لیست از رکوردها که به آن مربوط میشود خواهد داد. از سوی دیگر شما در جستجوهایتان میتوانید بگویید که مثلا به دنبال کلمه eat بگرد و حالتهای ماضی و مضارع آن را (eating و ate) نیز اگر وجود دارد بیاور

لازم به ذکر است که شما میتوانید stopwordها و یا کلمات زاید را تعریف کرده و عملیات ایندکس سازی و به پیرو آن جستجو روی آن ها انجام نشود مانند:the,and, است , بود , .....

این تنها مزایای آن است ولی معایبی دارد که برخی از کاربران ترجیح میدهند که از آن استفاده نکنند:

1- ایجاد یک fulltext کار زمانگیری بوده و باید دقیق انجام شود.

2- رکوردهای جدید و یا ویرایش شده باید سرشماری(population) شوند تا بتوان روی آن جستجو کرد که این نیز خود مشکلات زیادی را ایجاد میکند.

3- امکانات جستجوی مفهومی آن تنها برای زبان انگلیسی میباشد.

4- کار کردن با آن برای زبانهای غیر انگلیسی از جمله فارسی مشکلات و تنظیمات خاصی نیاز دارد.

5- فرمت دستورات آن مختص SQLServer بوده و از استانداردها تبعیت نمیکند.


-------------

با سلام؛

1- ابتدا باید مطمئن شوید که فول تکست را هنگام نصب اسکیوال نصب کرده اید

2- فول تکست بانک را فعال کنید(هر هنگام که فوتکست فعال نباشد باید ابتدا آنرا فعال کرد):


SELECT DatabaseProperty ('DBNname','IsFulltextEnabled')

اگر خروجی صفر باشید یعنی تا فعال نیست پس باید فعال شود:


EXEC sp_fulltext_database 'enable'

sp_configure "show advanced options",1
reconfigure



3- شما برای اینکه بتوانید بروی اطلاعات فارسی جستجو انجام دهید باید زبان پیش فرض فول تکست را زبان طبیعی(natural) کنید(اینکار فقط یک بار در عمر بانک اطلاعاتی انجام میشود):

در اسکیو ال 7:


sp_configure "language neutral full-text",1
reconfigure


در اسکیوال 2000:


sp_configure "default full-text language",1
reconfigure


4- برای ایجاد کاتالوگ نام آنرا در این دستور وارد کنید،


exec sp_fulltext_catalog 'CATName+','create'

شما به هر تعداد که بخواهید میتوانید کاتالوگ تعریف کنید ولی در اسکیو ال 7 بیش از 5 کاتالوگ اکیداً توصیه نمیشود و با مشکلاتی روبرو خواهید شد!!!

5- افزودن جدول به کاتالوگ، برای اینکار نیاز است که یک فیلد ایندکس داشته باشید(اینکار نیز تنها یکبار انجام خواهد شد)


exec sp_fulltext_table 'TableName','create','CATName','IndexFieldName'

6- حال نوبت افزودن فیلدها به کاتالوگ است:


EXEC sp_fulltext_table TableName,'deactivate'
EXEC sp_fulltext_column TableName,FullTextFieldName,'add'
EXEC sp_fulltext_table TableName,'activate'


تمامی فیلدها به این صورت باید به کاتالوگ اضافه شود برای اینکار بهتر است یک SP بنویسید:


CREATE PROCEDURE AddColumn2FTC
@TableName varchar(50),
@FullTextFieldName varchar(50)
AS
EXEC sp_fulltext_table @TableName,
'deactivate'
EXEC sp_fulltext_column @TableName,
@FullTextFieldName,
'add'
EXEC sp_fulltext_table @TableName,
'activate'

GO


تا کار شما راهتر و سبکتر شود.



7- برای اجرا سرشماری نیز از این دستورات استفاده کنید(توجه داشته باشید که دو نوع وجود دارد که برای اطلاعات بیشتر به راهنمای اسکیوال مراجعه کنید)


EXEC sp_fulltext_catalog 'CATName','start_full'

EXEC sp_fulltext_catalog 'CATName','start_incremental'


8- نمونه ایی نیز از دستورات مربوطه:


SELECT ProductName
FROM Products
WHERE CONTAINS(ProductName, ' "choc*" ')



SELECT ProductName
FROM Products
WHERE CONTAINS(ProductName, 'spread NEAR Boysenberry')




SELECT ProductName
FROM Products
WHERE CONTAINS(ProductName, ' FORMSOF (INFLECTIONAL, dry) ')


و در نهایت باید عرض کنم که خیلی از مراحل بالا توسط ویزاردهای اسکیوال قابل انجام میباشد.

PrinceDotNet
سه شنبه 27 دی 1384, 17:09 عصر
این کدها رو در چه محیطی و چه حالتی باید اجرا کرد ؟ مثل تعویض زبان یا



SELECT DatabaseProperty ('DBNname','IsFulltextEnabled')