maxpayn2
جمعه 14 دی 1386, 12:44 عصر
سلام
یه مقاله خوندم در باره استفاده از Full text Search ، میخواستم لینکش رو بزارم اینجا ولی جناب آقای بهروز راد (مدیر قسمت ASP.NET) فرمودند لینکهایی که احتیاج به login داره رو تو سایت نزارم من هم با اجازه از نویسنده مقاله اون رو اینجا میزارم :
جستجوهای قدرتمند , استفاده از Full Text Search
نویسنده مطلب : مهدی خسروی
منبع : DotNetSource.Com - DNS
یک مثال: فرض کنیم چنین عبارتی را در یک فیلد داریم و در رکوردهای مشابه نیز به همین حجم .
"به موجب مادة 7 قانون چک بلامحل مجازات فاعل، حبس تعزیری تعیین، ولی در مادة 13 همین قانون نوع حبس (تعزیری یا باز دارنده) قید نگردیده است، از طرفی مادة 12 قانون مجازات اسلامی انواع مجازاتها را به حدود، قصاص و دیات و تعزیرات و مجازاتهای باز دارنده تقسیم و هر کدام را تعریف نموده است، لذا با توجه به مقدمة فوق، آیا مجازات مقرر در مواد 7 و 13 قانون صدور چک بلامحل از نوع تعزیری است یا بازدارنده؟ و آیا میتوان محکومان صدور چک بلامحل را مشمول مواد 173 قانون آیین دادرسی دادگاههای عمومی و انقلاب که منحصراً مربوط به اشخاصی که محکومیت از نوع مجازاتهای بازدارنده تحصیل نمودهاند تسری داد یا خیر؟
توضیح:
یکی از مباحث مهمی که در بین فقها مطرح است در مورد قلمرو اعمال مجازات تعزیری به عبارت دیگر افعال قابل تعزیر است. در این خصوص بین فقها چهار نظر وجود دارد:
الف. عدهای معتقدند اساسا عملی قابل تعزیر است که شرعاً حرام باشد(به خاطر ارتکاب فعل حرام یا ترک واجب) که آن¬چه از کتابهای فقهی بر میآید قول مشهور فقها هم این نظر است.
ب. عده¬ای دیگر اعتقاد دارند هر فعل حرام یا ترک واجب قابل تعزیرنیست بلکه عملی قابل تعزیر است که از «گناهان کبیره» باشد.
ج. برخی را نیز عقیده بر این است، عملی قابل تعزیر است که اولاً : در شرع حرام شده باشد، ثانیاً : در شرع قابل تعزیر شناخته شده باشد ثالثاً : مقدار هم معین شده باشد.
د. این دسته میگویند عملی قابل تعزیر است که منجر به اضرار به غیر شود، به عبارت دیگر، هر عملی که مفسده زا باشد میتواند ملاک تعزیر قرار گیرد.
با توجه مفاهیم داده شده میتوان، حرام را به حرام شرعی و حرام عقلی و واجب را به واجب شرعی و واجب عقلی تقسیم نمود که حرام و واجب شرعی همان است که توسط شارع مقدس تعیین شده و حرام و واجب عقلی همان است که عقلای جهان بر قبح آن اتفاق دارند. همانند جرایم رانندگی یا جرم صدور چک بلامحل.
بنابراین از نظر فقهی، جرایم موجب تعزیر دو دسته¬اند :
1. جرایمی که همواره در جامعه وجود داشته و به عنوان جرم شناخته شده و در زمان شارع هم بوده است، اعم از تعزیرات معینه مثل وطی با بهایم و غیر معینه مثل اعمال منافی عفت غیر از زنا که به این¬ها «تعزیرات شرعی» میگویند.
2. دسته دوم جرایمی که بر حسب زمان و مکان از ناحیه حکومت تعریف و ارتکاب آنها موجب الزامات یا ممنوعیت¬های حکومتی مجازات تعزیری است که هم اکنون ما آنها را تعزیرات حکومتی یا مجازات بازدارنده مینامیم."
حال می خواهیم جستجویی داشته باشیم که به دنبال کلمه ی محکومیت در یک چنین رکوردی بگردیم. فرض می کنیم اسم فیلد question میباشد با این خط کد می توانیم این کار را انجام دهیم:
کد:
SELECT * FROM t_question WHERE question LIKE '*محکومیت*'
بله, همانطوری که گفتم نتیجه بازگردانده خواهد شد اما به مدت طول یک عمر! هرچقدر تعداد رکورد ها بیشتر شود مدت زمان نیز ....! در این هنگام تنها چیزی که به کمک ما می آید Full Text Indexing می باشد که در زیر در مورد آن صحبت می کنیم.
یکی از امکانات جالب و قدرتمند SQL Server که از نسخه 7 به بالا اضافه شده است Full Text Search میباشد.
ابتدا باید کاتالوگهایی ایجاد شوند و بعد از آن جداولی که قرار است روی آنها جستجوهای حجیم انجام شود را به این کاتالوگها اضافه نمود و در نهایت نیز باید فیلدهایی که قرار است جستجو بر روی آنها انجام شوند تعیین خواهد شوند. حال شما میتوانید بروی این جدول و فیلدهایی که کاندید شده اند جستجوهایی متنی کامل(full text) و یا جستجوهای مفهومی داشته باشید.
در جستجوی مفهومی نیز شما میتوانید با جملات انگلیسی از بانک اطلاعاتی سئوال کنید مثلا:"what "What is JAVA" و بانک اطلاعاتی جوابهای سوال شما را بصورت لیست از رکوردها که به آن مربوط میشود خواهد داد. از سوی دیگر شما در جستجوهایتان میتوانید بگویید که مثلا به دنبال کلمه eat بگرد و حالتهای ماضی و مضارع آن را(ate و eating) نیز اگر وجود دارد بیاور.
لازم به ذکر است که شما میتوانید stopwordها و یا کلمات زاید را تعریف کرده و عملیات ایندکس سازی و به پیرو آن جستجو روی آن ها انجام نشود مانند:the,and, است , بود , .....
معایب :
1- ایجاد یک Full Text Index کار زمانگیری بوده و باید دقیق انجام شود (اما به زحمتش می ارزه!!)
2- رکوردهای جدید و یا ویرایش شده باید سرشماری(population) شوند تا بتوان روی آن جستجو کرد که این نیز خود مشکلات زیادی را ایجاد میکند.(کمی تجربه این مشکلات را هم براحتی حل می کند!!)
3- امکانات جستجوی مفهومی آن تنها برای زبان انگلیسی میباشد.(می توان این کار را برای زبان فارسی و دیگر زبان ها انجام داد اما یک انسان از خود گذشته باید پیدا شود تا کلمات و هم خانواده ها و ماضی و مضارع و غیره و غیره را برای این انجین تعریف کند)
4- کار کردن با آن برای زبانهای غیر انگلیسی از جمله فارسی مشکلات و تنظیمات خاصی نیاز دارد.(که البته در نسخه ی 2005 مشکلات خیلی خیلی کم شده اند و بهتر است بگویم تقریبا مشکلی وجود ندارد.)
5- فرمت دستورات آن مختص SQLServer بوده و از استانداردها تبعیت نمیکند.
کمی چرت و پرت :
1- ابتدا باید مطمئن شوید که فول تکست را هنگام نصب اسکیوال نصب کرده اید.
2- این قابلیت را برای بانک خود فعال کنید, برای آگاهی از فعال بودن آن این کد کمکتان می کند:
کد:
SELECT DatabaseProperty ('DBNname','IsFulltextEnabled')
اگر خروجی صفر باشید یعنی تا فعال نیست پس باید فعال شود:
کد:
EXEC sp_fulltext_database 'enable'
sp_configure "show advanced options",1
reconfigure
شما به هر تعداد که بخواهید میتوانید کاتالوگ تعریف کنید ولی در اسکیو ال 7 بیش از 5 کاتالوگ اکیداً توصیه نمیشود و با مشکلاتی روبرو خواهید شد!!!
3- برای ایجاد کاتالوگ نام آنرا در این دستور وارد کنید:
کد:
exec sp_fulltext_catalog 'CATName+','create'
4- این اندکس ها در کاتالوگ ها ذخیره می شوند جدول های مورد نظر خود را به این کاتالوگ ها اضافه کنید:
کد:
exec sp_fulltext_table 'TableName','create','CATName','IndexFieldName'
5- حال نوبت افزودن فیلدها به کاتالوگ است:
کد:
EXEC sp_fulltext_table TableName,'deactivate'
EXEC sp_fulltext_column TableName,FullTextFieldName,'add'
EXEC sp_fulltext_table TableName,'activate'
6- برای اجرا سرشماری نیز از این دستورات استفاده کنید(توجه داشته باشید که دو نوع وجود دارد که برای اطلاعات بیشتر به BooksOnline مراجعه کنید(:
کد:
EXEC sp_fulltext_catalog 'CATName','start_full'
EXEC sp_fulltext_catalog 'CATName','start_incremental'
وقتی سرشماری انجام شد می توانید کوئری های خود را اجرا کنید:
کوئری که در بالا داشتیم و عبارت محکومیت را جستجو می کرد به این صورت در خواهد آمد اما اینبار در کسری از ثانیه پاسخ خواهد داد:
کد:
SELECT * FROM t_question WHERE CONTAINS(question,'محکومیت')
می توان جستجو های ترکیبی نیز داشت که این کار با دلالت کیورد هایی مثل AND OR و ... انجام خواهد شد. مثلا دنبال رکوردی می گردیم که علاوه بر عبارت محکومیت شامل عبارت شرع نیز باشد. به این صورت:
کد:
SELECT * FROM t_question WHERE CONTAINS(question, '"محکومیت" and "شرع"'(
نمونه ای نیز از دستورات مربوطه:
کد:
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) ')
حتما یک سری به BooksOnline هم بزنید.
نکته ی دیگر این است که تمامی مراحل ایجاد کاتالوگ و افزودن جدول به کاتالوگ و راه اندازی Full Text Search برای بانک و ... و .... همگی از طریق ویزاردها قابل انجام شدن می باشند.
یه مقاله خوندم در باره استفاده از Full text Search ، میخواستم لینکش رو بزارم اینجا ولی جناب آقای بهروز راد (مدیر قسمت ASP.NET) فرمودند لینکهایی که احتیاج به login داره رو تو سایت نزارم من هم با اجازه از نویسنده مقاله اون رو اینجا میزارم :
جستجوهای قدرتمند , استفاده از Full Text Search
نویسنده مطلب : مهدی خسروی
منبع : DotNetSource.Com - DNS
یک مثال: فرض کنیم چنین عبارتی را در یک فیلد داریم و در رکوردهای مشابه نیز به همین حجم .
"به موجب مادة 7 قانون چک بلامحل مجازات فاعل، حبس تعزیری تعیین، ولی در مادة 13 همین قانون نوع حبس (تعزیری یا باز دارنده) قید نگردیده است، از طرفی مادة 12 قانون مجازات اسلامی انواع مجازاتها را به حدود، قصاص و دیات و تعزیرات و مجازاتهای باز دارنده تقسیم و هر کدام را تعریف نموده است، لذا با توجه به مقدمة فوق، آیا مجازات مقرر در مواد 7 و 13 قانون صدور چک بلامحل از نوع تعزیری است یا بازدارنده؟ و آیا میتوان محکومان صدور چک بلامحل را مشمول مواد 173 قانون آیین دادرسی دادگاههای عمومی و انقلاب که منحصراً مربوط به اشخاصی که محکومیت از نوع مجازاتهای بازدارنده تحصیل نمودهاند تسری داد یا خیر؟
توضیح:
یکی از مباحث مهمی که در بین فقها مطرح است در مورد قلمرو اعمال مجازات تعزیری به عبارت دیگر افعال قابل تعزیر است. در این خصوص بین فقها چهار نظر وجود دارد:
الف. عدهای معتقدند اساسا عملی قابل تعزیر است که شرعاً حرام باشد(به خاطر ارتکاب فعل حرام یا ترک واجب) که آن¬چه از کتابهای فقهی بر میآید قول مشهور فقها هم این نظر است.
ب. عده¬ای دیگر اعتقاد دارند هر فعل حرام یا ترک واجب قابل تعزیرنیست بلکه عملی قابل تعزیر است که از «گناهان کبیره» باشد.
ج. برخی را نیز عقیده بر این است، عملی قابل تعزیر است که اولاً : در شرع حرام شده باشد، ثانیاً : در شرع قابل تعزیر شناخته شده باشد ثالثاً : مقدار هم معین شده باشد.
د. این دسته میگویند عملی قابل تعزیر است که منجر به اضرار به غیر شود، به عبارت دیگر، هر عملی که مفسده زا باشد میتواند ملاک تعزیر قرار گیرد.
با توجه مفاهیم داده شده میتوان، حرام را به حرام شرعی و حرام عقلی و واجب را به واجب شرعی و واجب عقلی تقسیم نمود که حرام و واجب شرعی همان است که توسط شارع مقدس تعیین شده و حرام و واجب عقلی همان است که عقلای جهان بر قبح آن اتفاق دارند. همانند جرایم رانندگی یا جرم صدور چک بلامحل.
بنابراین از نظر فقهی، جرایم موجب تعزیر دو دسته¬اند :
1. جرایمی که همواره در جامعه وجود داشته و به عنوان جرم شناخته شده و در زمان شارع هم بوده است، اعم از تعزیرات معینه مثل وطی با بهایم و غیر معینه مثل اعمال منافی عفت غیر از زنا که به این¬ها «تعزیرات شرعی» میگویند.
2. دسته دوم جرایمی که بر حسب زمان و مکان از ناحیه حکومت تعریف و ارتکاب آنها موجب الزامات یا ممنوعیت¬های حکومتی مجازات تعزیری است که هم اکنون ما آنها را تعزیرات حکومتی یا مجازات بازدارنده مینامیم."
حال می خواهیم جستجویی داشته باشیم که به دنبال کلمه ی محکومیت در یک چنین رکوردی بگردیم. فرض می کنیم اسم فیلد question میباشد با این خط کد می توانیم این کار را انجام دهیم:
کد:
SELECT * FROM t_question WHERE question LIKE '*محکومیت*'
بله, همانطوری که گفتم نتیجه بازگردانده خواهد شد اما به مدت طول یک عمر! هرچقدر تعداد رکورد ها بیشتر شود مدت زمان نیز ....! در این هنگام تنها چیزی که به کمک ما می آید Full Text Indexing می باشد که در زیر در مورد آن صحبت می کنیم.
یکی از امکانات جالب و قدرتمند SQL Server که از نسخه 7 به بالا اضافه شده است Full Text Search میباشد.
ابتدا باید کاتالوگهایی ایجاد شوند و بعد از آن جداولی که قرار است روی آنها جستجوهای حجیم انجام شود را به این کاتالوگها اضافه نمود و در نهایت نیز باید فیلدهایی که قرار است جستجو بر روی آنها انجام شوند تعیین خواهد شوند. حال شما میتوانید بروی این جدول و فیلدهایی که کاندید شده اند جستجوهایی متنی کامل(full text) و یا جستجوهای مفهومی داشته باشید.
در جستجوی مفهومی نیز شما میتوانید با جملات انگلیسی از بانک اطلاعاتی سئوال کنید مثلا:"what "What is JAVA" و بانک اطلاعاتی جوابهای سوال شما را بصورت لیست از رکوردها که به آن مربوط میشود خواهد داد. از سوی دیگر شما در جستجوهایتان میتوانید بگویید که مثلا به دنبال کلمه eat بگرد و حالتهای ماضی و مضارع آن را(ate و eating) نیز اگر وجود دارد بیاور.
لازم به ذکر است که شما میتوانید stopwordها و یا کلمات زاید را تعریف کرده و عملیات ایندکس سازی و به پیرو آن جستجو روی آن ها انجام نشود مانند:the,and, است , بود , .....
معایب :
1- ایجاد یک Full Text Index کار زمانگیری بوده و باید دقیق انجام شود (اما به زحمتش می ارزه!!)
2- رکوردهای جدید و یا ویرایش شده باید سرشماری(population) شوند تا بتوان روی آن جستجو کرد که این نیز خود مشکلات زیادی را ایجاد میکند.(کمی تجربه این مشکلات را هم براحتی حل می کند!!)
3- امکانات جستجوی مفهومی آن تنها برای زبان انگلیسی میباشد.(می توان این کار را برای زبان فارسی و دیگر زبان ها انجام داد اما یک انسان از خود گذشته باید پیدا شود تا کلمات و هم خانواده ها و ماضی و مضارع و غیره و غیره را برای این انجین تعریف کند)
4- کار کردن با آن برای زبانهای غیر انگلیسی از جمله فارسی مشکلات و تنظیمات خاصی نیاز دارد.(که البته در نسخه ی 2005 مشکلات خیلی خیلی کم شده اند و بهتر است بگویم تقریبا مشکلی وجود ندارد.)
5- فرمت دستورات آن مختص SQLServer بوده و از استانداردها تبعیت نمیکند.
کمی چرت و پرت :
1- ابتدا باید مطمئن شوید که فول تکست را هنگام نصب اسکیوال نصب کرده اید.
2- این قابلیت را برای بانک خود فعال کنید, برای آگاهی از فعال بودن آن این کد کمکتان می کند:
کد:
SELECT DatabaseProperty ('DBNname','IsFulltextEnabled')
اگر خروجی صفر باشید یعنی تا فعال نیست پس باید فعال شود:
کد:
EXEC sp_fulltext_database 'enable'
sp_configure "show advanced options",1
reconfigure
شما به هر تعداد که بخواهید میتوانید کاتالوگ تعریف کنید ولی در اسکیو ال 7 بیش از 5 کاتالوگ اکیداً توصیه نمیشود و با مشکلاتی روبرو خواهید شد!!!
3- برای ایجاد کاتالوگ نام آنرا در این دستور وارد کنید:
کد:
exec sp_fulltext_catalog 'CATName+','create'
4- این اندکس ها در کاتالوگ ها ذخیره می شوند جدول های مورد نظر خود را به این کاتالوگ ها اضافه کنید:
کد:
exec sp_fulltext_table 'TableName','create','CATName','IndexFieldName'
5- حال نوبت افزودن فیلدها به کاتالوگ است:
کد:
EXEC sp_fulltext_table TableName,'deactivate'
EXEC sp_fulltext_column TableName,FullTextFieldName,'add'
EXEC sp_fulltext_table TableName,'activate'
6- برای اجرا سرشماری نیز از این دستورات استفاده کنید(توجه داشته باشید که دو نوع وجود دارد که برای اطلاعات بیشتر به BooksOnline مراجعه کنید(:
کد:
EXEC sp_fulltext_catalog 'CATName','start_full'
EXEC sp_fulltext_catalog 'CATName','start_incremental'
وقتی سرشماری انجام شد می توانید کوئری های خود را اجرا کنید:
کوئری که در بالا داشتیم و عبارت محکومیت را جستجو می کرد به این صورت در خواهد آمد اما اینبار در کسری از ثانیه پاسخ خواهد داد:
کد:
SELECT * FROM t_question WHERE CONTAINS(question,'محکومیت')
می توان جستجو های ترکیبی نیز داشت که این کار با دلالت کیورد هایی مثل AND OR و ... انجام خواهد شد. مثلا دنبال رکوردی می گردیم که علاوه بر عبارت محکومیت شامل عبارت شرع نیز باشد. به این صورت:
کد:
SELECT * FROM t_question WHERE CONTAINS(question, '"محکومیت" and "شرع"'(
نمونه ای نیز از دستورات مربوطه:
کد:
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) ')
حتما یک سری به BooksOnline هم بزنید.
نکته ی دیگر این است که تمامی مراحل ایجاد کاتالوگ و افزودن جدول به کاتالوگ و راه اندازی Full Text Search برای بانک و ... و .... همگی از طریق ویزاردها قابل انجام شدن می باشند.