Sqlserver
 sql >> डेटाबेस >  >> RDS >> Sqlserver

SQL सर्वर पूर्ण-पाठ खोज (FTS) के साथ स्टॉपलिस्ट के उपयोग में महारत हासिल करना

स्टॉपलिस्ट बनाना और प्रबंधित करना इंडेक्स के आकार को कम करने के साथ-साथ पूर्ण-पाठ खोज प्रदर्शन में सुधार के लिए जिम्मेदार मुख्य घटकों में से एक के रूप में कार्य करता है। इस लेख का उद्देश्य सरल लेकिन दिलचस्प उदाहरणों पर स्टॉपलिस्ट बनाने के लिए आपको नौकरी में गहराई से महारत हासिल करने और कई रणनीतियों को लागू करने में मदद करना है।

हम स्टॉपलिस्ट बनाने के लिए विभिन्न तरीकों के महत्व पर भी प्रकाश डालेंगे और स्पष्ट करेंगे कि सबसे उपयुक्त विधि कैसे चुनें।

स्टॉपलिस्ट में महारत हासिल करना क्यों

जब हम पूर्ण-पाठ खोज से संबंधित स्टॉपलिस्ट का उपयोग करने के बारे में बात करते हैं, तो पहला सवाल यह है कि हम इन स्टॉपलिस्ट के बारे में इतना कुछ क्यों सीखते हैं। इसका उत्तर पूर्ण-पाठ खोज के साथ स्टॉपलिस्ट का उपयोग करने के स्पष्ट और छिपे दोनों लाभों में निहित है। एक बार सफलतापूर्वक लागू होने के बाद वे दीर्घकालिक लाभ भी ला सकते हैं।

स्टॉपलिस्ट का महत्व

स्टॉपलिस्ट पूर्ण-पाठ खोज का एक भाषा-विशिष्ट घटक है जिसमें उपयोगकर्ता-परिभाषित या सिस्टम-प्रदत्त स्टॉपवर्ड होते हैं। इसे ऐसे शब्दों को पूर्ण-पाठ खोज का हिस्सा बनने से बाहर करना होगा।

स्टॉपलिस्ट के बिना एक पूर्ण-पाठ खोज डिज़ाइन भाषा-विशिष्ट घटकों का इष्टतम उपयोग नहीं है जो पूर्ण-पाठ खोज दक्षता और प्रतिक्रिया समय में सुधार करना चाहिए।

आवश्यकताएं

  1. आप T-SQL स्क्रिप्ट लिख और चला सकते हैं।
  2. पूर्ण-पाठ खोज को आपके SQL सर्वर आवृत्ति में स्थापित किया जाना चाहिए।
  3. आप बुनियादी पूर्ण-पाठ खोज अवधारणाओं और कार्यान्वयन से परिचित हैं।
  4. आपको स्टॉपवर्ड और स्टॉपलिस्ट का बुनियादी ज्ञान है।

यदि आपके पास उपरोक्त आवश्यकताओं को सुनिश्चित करने के लिए जानकारी की कमी है, तो नीचे दिए गए लेख देखें:

  • शुरुआती लोगों के लिए SQL सर्वर 2016 में पूर्ण-पाठ खोज लागू करना
  • उन्नत उपयोगकर्ताओं के लिए SQL सर्वर 2016 में पूर्ण-पाठ खोज लागू करना
  • एसक्यूएल सर्वर फुल-टेक्स्ट सर्च (एफटीएस) को बेहतर बनाने के लिए स्टॉपवर्ड और स्टॉपलिस्ट का उपयोग कैसे करें

स्टॉपलिस्ट निर्माण की कई रणनीतियां

कई अलग-अलग तरीके या रणनीतियाँ हैं, लेकिन उनमें से कुछ दूसरों की तुलना में कहीं बेहतर हैं। पूर्ण-पाठ खोज कार्यान्वयन कौशल वाले किसी भी डेटाबेस डेवलपर को आवश्यकता पड़ने पर सर्वोत्तम तरीके चुनने के सभी तरीकों से परिचित होना चाहिए।

इन विभिन्न रणनीतियों को समझने का सबसे प्रभावी तरीका उन्हें एक नमूना डेटाबेस के विरुद्ध लागू करना है।

सेटअप नमूना डेटाबेस

पहला कदम डेटाबेस को पूर्ण-पाठ प्रश्नों को चलाने के लिए सेट करना है। WatchReviewsMasterStoplist . नामक एक नमूना डेटाबेस बनाएं :

-- Create WatchReviewsMasterStoplist database
CREATE DATABASE WatchReviewsMasterStoplist;
GO

-- Connect to the sample database
USE WatchReviewsMasterStoplist

-- (2) Create WatchReview table
CREATE TABLE [dbo].[WatchReview]
(
	[ReviewId] INT NOT NULL IDENTITY , 
    [Date] DATETIME2 NULL, 
    [Person] VARCHAR(50) NULL, 
    [Details] VARCHAR(1000) NULL, 
    CONSTRAINT [PK_WatchReview] PRIMARY KEY (ReviewId)
)

-- (3) Populate WatchReview table
SET IDENTITY_INSERT [dbo].[WatchReview] ON
INSERT INTO [dbo].[WatchReview] ([ReviewId], [Date], [Person], [Details]) VALUES (1, N'2020-06-01 00:00:00', N'Asif', N'Hi, I have just bought this Casio black digital watch which is excellent and has date, alarm, stopwatch and timer as well.')
INSERT INTO [dbo].[WatchReview] ([ReviewId], [Date], [Person], [Details]) VALUES (2, N'2020-07-02 00:00:00', N'Asim', N'Hi, I have just bought this Casio black analog watch which is average and slightly discomforting and just got date and time.')
INSERT INTO [dbo].[WatchReview] ([ReviewId], [Date], [Person], [Details]) VALUES (3, N'2020-08-03 00:00:00', N'Martin', N'Hi, I have just purchased this Casio black digital watch which is excellent and has features like an alarm, stopwatch, date, and timer. ')
INSERT INTO [dbo].[WatchReview] ([ReviewId], [Date], [Person], [Details]) VALUES (4, N'2020-09-10 00:00:00', N'Brian ', N'Hi, I have just ordered this Seiko black digital watch which is excellent and has date, alarm and timer.')
INSERT INTO [dbo].[WatchReview] ([ReviewId], [Date], [Person], [Details]) VALUES (5, N'2020-10-11 00:00:00', N'Peter', N'Hi, I have just ordered this Seiko white analog watch which is average and has alarm, date and timer.')
SET IDENTITY_INSERT [dbo].[WatchReview] OFF

एकाधिक स्टॉपलिस्ट रणनीतियां अवलोकन

स्टॉपलिस्ट बनाने और शोर शब्दों को अपनी पूर्ण-पाठ खोज क्वेरी का हिस्सा बनने से रोकने के लिए आप निम्नलिखित तीन तरीकों/रणनीतियों का उपयोग कर सकते हैं:

  1. कस्टम स्टॉपलिस्ट बनाएं
  2. सिस्टम स्टॉपलिस्ट बनाएं
  3. कस्टम (या सिस्टम) स्टॉपलिस्ट से स्टॉपलिस्ट बनाएं

स्टॉपलिस्ट पूर्वापेक्षाएँ

याद रखें कि स्टॉपलिस्ट बनाने से पहले, आपको निम्न कार्य करने होंगे:

  1. यदि कोई कुंजी कॉलम उपलब्ध नहीं है (प्राथमिक कुंजी) तो तालिका कॉलम में से किसी एक पर एक अद्वितीय अनुक्रमणिका बनाएं।
  2. एक पूर्ण-पाठ कैटलॉग बनाएं।
  3. एक पूर्ण-पाठ अनुक्रमणिका बनाएं।

कस्टम स्टॉपलिस्ट बनाएं

मान लें कि एक अद्वितीय अनुक्रमणिका या प्राथमिक कुंजी कॉलम उपलब्ध है (जैसा कि हमारे नमूना डेटाबेस में है)। हम निम्नानुसार एक कस्टम स्टॉपलिस्ट बनाते हैं:

  1. एक पूर्ण-पाठ कैटलॉग बनाएं।
  2. खाली कस्टम स्टॉपलिस्ट बनाएं।
  3. चरण 2 में बनाई गई कस्टम स्टॉपलिस्ट के साथ एक पूर्ण-पाठ अनुक्रमणिका बनाएं।

विस्तृत जानकारी के लिए, आलेख देखें कि SQL सर्वर पूर्ण-पाठ खोज (FTS) को बेहतर बनाने के लिए स्टॉपवर्ड और स्टॉपलिस्ट का उपयोग कैसे करें

कस्टम स्टॉपलिस्ट के फायदे और नुकसान

एक कस्टम स्टॉपलिस्ट बनाने का सबसे बड़ा फायदा यह है कि आप उस पर पूर्ण नियंत्रण रख सकते हैं और उन शब्दों को जोड़कर और हटाकर उस पर नज़र रख सकते हैं जो आपको लगता है कि शोर शब्द हैं।

हालांकि, इस दृष्टिकोण का उपयोग करने के लिए एक नकारात्मक पहलू है। स्टॉपलिस्ट बहुत सीमित है, और इसमें पूर्ण-पाठ क्वेरी के प्रदर्शन को और बेहतर बनाने के लिए सिस्टम द्वारा सुझाए गए स्टॉपवर्ड शामिल नहीं होंगे।

सिस्टम स्टॉपलिस्ट बनाना

एक सिस्टम स्टॉपलिस्ट बनाएं (यदि प्राथमिक कुंजी कॉलम या अद्वितीय अनुक्रमणिका प्रदान की जाती है) इस प्रकार है:

  1. एक पूर्ण-पाठ कैटलॉग बनाएं।
  2. सिस्टम स्टॉपलिस्ट के साथ एक पूर्ण-पाठ अनुक्रमणिका बनाएं।

हम पहले एक पूर्ण-पाठ कैटलॉग बनाकर सिस्टम स्टॉपलिस्ट का उपयोग करने की तैयारी करते हैं:

-- Create Full-Text catalog
CREATE FULLTEXT CATALOG [WatchReviewCatalog] AS DEFAULT;
GO

WatchReview तालिका के समीक्षा कॉलम (विवरण) पर एक पूर्ण-पाठ अनुक्रमणिका बनाएं सिस्टम स्टॉपलिस्ट के साथ। निम्नलिखित टी-एसक्यूएल स्क्रिप्ट का प्रयोग करें:

-- Create Full-Text index with System Stoplist
CREATE FULLTEXT INDEX ON dbo.WatchReview(Details LANGUAGE [British English]) 
   KEY INDEX PK_WatchReview  
   WITH STOPLIST = System;  
GO  

अंग्रेजी भाषा प्रणाली स्टॉपलिस्ट देखें

आप ब्रिटिश अंग्रेजी के सिस्टम स्टॉपलिस्ट में शामिल स्टॉपवर्ड की सूची देख सकते हैं। निम्न SQL क्वेरी चलाएँ:

-- View system stoplist of English language
SELECT name,stopword FROM sys.fulltext_system_stopwords sw
INNER JOIN sys.fulltext_languages fl
on sw.language_id=fl.lcid
where name='British English'

आउटपुट इस प्रकार है:

शीर्ष 3 सबसे हाल की समीक्षाएं देखें

नव निर्मित नमूना डेटाबेस के विरुद्ध एक त्वरित जाँच चलाएँ। WatchReview . से शीर्ष 3 सबसे हाल की घड़ी समीक्षाएं प्राप्त करके इसे करें तालिका:

-- Top 3 most recent watch reviews 
SELECT TOP 3 wr.Person,FORMAT(wr.Date,'dd-MMM-yyyy') as ReviewDate,wr.Details FROM dbo.WatchReview wr
ORDER BY wr.Date DESC

आउटपुट इस प्रकार है:

पूर्ण-पाठ क्वेरी चलाकर स्टॉपवर्ड की जांच करना

हम नामांकित तालिका के विरुद्ध पूर्ण-पाठ प्रश्नों को चला सकते हैं। यदि कई शोर शब्द (प्रदर्शन को बेहतर बनाने के लिए सिस्टम स्टॉपलिस्ट में शामिल) पूर्ण-पाठ प्रश्नों में दिखाई नहीं देते हैं, तो आश्चर्यचकित न हों। इसका मतलब है कि हमारा सिस्टम स्टॉपलिस्ट अपना काम सही तरीके से कर रहा है।

जैसा कि हम देख सकते हैं, शब्द ‘यह’ शीर्ष 3 समीक्षाओं में मौजूद है। हालाँकि, यह एक शोर शब्द है जिसे सिस्टम स्टॉपलिस्ट द्वारा पहचाना जाता है।

आइए देखें कि क्या कोई पूर्ण-पाठ खोज शोर शब्द देता है 'यह' सिस्टम स्टॉपलिस्ट में शामिल:

--Run Full-Text query to Search for Noise word 'this' 
SELECT * FROM dbo.WatchReview
WHERE CONTAINS(Details,'this')

परिणाम सेट नीचे है:

अब हम ‘is’ . शब्द की खोज के लिए पूर्ण-पाठ क्वेरी चला सकते हैं जो एक और शोर शब्द है:

--Run Full-Text query to Search for Noise word 'is' 
SELECT * FROM dbo.WatchReview
WHERE CONTAINS(Details,'is')

क्वेरी आउटपुट नीचे है:

हम देख सकते हैं कि शब्द 'है' मूल्यवान संसाधनों को सहेज कर पूर्ण-पाठ क्वेरी परिणाम का हिस्सा बनने से भी सफलतापूर्वक रोका गया है।

'Hi' शब्द खोजने के लिए पूर्ण-पाठ क्वेरी

हम ‘Hi.’ . शब्द की खोज के लिए एक पूर्ण-पाठ क्वेरी चलाते हैं यह सिस्टम स्टॉपलिस्ट का हिस्सा नहीं है। इस प्रकार, क्वेरी को इसे वापस करना होगा।

--Search Noise word 'Hi' 
SELECT * FROM dbo.WatchReview
WHERE CONTAINS(Details,'Hi')

आउटपुट इस प्रकार है:

हमें ‘Hi.’ शब्द वाले सभी रिकॉर्ड मिले हैं। हालाँकि, हम इसे बाहर करना चाहेंगे, क्योंकि यह एक शोर शब्द है। यदि हम अपने पाठ्य विश्लेषण में पूर्ण-पाठ खोज का उपयोग करते हैं, तो यह शब्द हमें उद्देश्य से विचलित कर सकता है।

यह हमें तीसरी विधि की ओर ले जाता है:एक कस्टम या सिस्टम स्टॉपलिस्ट से स्टॉपलिस्ट बनाना।

सिस्टम स्टॉपलिस्ट से कस्टम स्टॉपलिस्ट बनाना

WatchMasterStoplist . नामक एक कस्टम स्टॉपलिस्ट बनाएं निम्न T-SQL स्क्रिप्ट के साथ सिस्टम स्टॉपलिस्ट से:

--Creating a custom stoplist WatchMasterStoplist from system stoplist 
CREATE FULLTEXT STOPLIST [WatchMasterStoplist] FROM SYSTEM STOPLIST;
GO

एक नई कस्टम स्टॉपलिस्ट को पूर्ण-पाठ अनुक्रमणिका के साथ संबद्ध करना

नव निर्मित कस्टम स्टॉपलिस्ट को पूर्ण-पाठ अनुक्रमणिका के साथ निम्नानुसार संबद्ध करें:

USE [WatchReviewsMasterStoplist]
GO
-- Associating new custom stoplist with Full-Text index
ALTER FULLTEXT INDEX ON [dbo].[WatchReview] SET STOPLIST = [WatchMasterStoplist]

शब्द 'यह' की खोज करके कस्टम स्टॉपलिस्ट की जांच करना

आप तुरंत जांच सकते हैं कि आपकी कस्टम स्टॉपलिस्ट में सिस्टम स्टॉपलिस्ट के सभी शोर शब्द शामिल हैं या नहीं। 'यह' शब्द खोजने के लिए वही कोड चलाएँ जिसका उपयोग हमने पहले किया था।

--Run Full-Text query to Search for Noise word 'this' 
SELECT * FROM dbo.WatchReview
WHERE CONTAINS(Details,'this')

यह आउटपुट खाली होना चाहिए।

कस्टम स्टॉपलिस्ट में एक नया नॉइज़ शब्द 'Hi' जोड़ना

हमें शोर शब्द जोड़ने की जरूरत है 'नमस्ते' नव निर्मित कस्टम स्टॉपलिस्ट के लिए। निम्न स्क्रिप्ट चलाएँ:

--Alter customer stoplist to add Hi noise word
ALTER FULLTEXT STOPLIST WatchMasterStoplist
ADD 'Hi' LANGUAGE 'British English';  

परिणाम सेट नीचे है:

अंतिम जांच

अब हम कुछ शोर शब्दों के लिए अंतिम पूर्ण-पाठ क्वेरी जांच चलाएंगे - हम इसकी तुलना उन शोर शब्दों वाले मूल परिणाम सेट से करते हैं।

उदाहरण के लिए, यदि हम चौथी समीक्षा पर ध्यान केंद्रित करते हैं (ReviewId . द्वारा आदेशित) ), जिसमें कुछ शोर शब्द होते हैं, और फिर परिणामों की तुलना पूर्ण-पाठ क्वेरी परिणामों से करते हैं, हमें कोई शोर शब्द नहीं दिखना चाहिए।

नमूना डेटाबेस के विरुद्ध अंतिम जाँच करने के लिए निम्न स्क्रिप्ट चलाएँ:

USE WatchReviewsMasterStoplist

-- View the record which contains fourth review 
SELECT ReviewId
      ,[Date]
      ,Person
      ,Details
  FROM dbo.WatchReview
  where ReviewId=4

--Run Full-Text	query to Search for Noise words in the fourth review
SELECT * FROM dbo.WatchReview
WHERE CONTAINS(Details,'"Hi" OR "this" OR "I" OR "is" OR "and"')
and ReviewId=4

आउटपुट इस प्रकार है:

डिजिटल घड़ियों की समीक्षा खोजने के लिए पूर्ण-पाठ क्वेरी

अब हम स्टॉपलिस्ट के साथ अपनी पूर्ण-पाठ खोज क्वेरी चला सकते हैं। निम्नलिखित टी-एसक्यूएल स्क्रिप्ट हमें डिजिटल घड़ियों की समीक्षा (नमूना) के बारे में सूचित करेगी:

USE WatchReviewsMasterStoplist

--Run Full-Text query to Search for digital watch reviews sample
SELECT * FROM dbo.WatchReview WHERE CONTAINS(Details,'digital')

परिणाम नीचे हैं:

बधाई हो! हमने स्टॉपलिस्ट बनाने और संबद्ध करने के सभी तीन तरीकों को सफलतापूर्वक लागू किया है। हमने स्टॉपलिस्ट में नए शब्दों को जोड़ने और प्रदर्शन की जांच करने की भी जांच की।

फिर भी, मैं तीसरी विधि की दृढ़ता से अनुशंसा करता हूं। सिस्टम स्टॉपलिस्ट से एक कस्टम स्टॉपलिस्ट बनाएं, और फिर अपनी पूर्ण-पाठ खोज को बेहतर बनाने के लिए शोर शब्द जोड़ें।

करने के लिए चीज़ें

अब जब आप स्टॉपलिस्ट बनाने के तीन तरीकों से अच्छी तरह वाकिफ हैं, तो आप अपने टेक्स्ट विश्लेषण कौशल को बेहतर बनाने के लिए कुछ अभ्यास कर सकते हैं, जैसे कि:

  1. सिस्टम स्टॉपलिस्ट से नमूना डेटाबेस के लिए एक कस्टम स्टॉपलिस्ट जोड़ें, जैसा कि इस आलेख में है।
  2. इस आलेख की तरह, नमूना डेटाबेस के विरुद्ध सिस्टम स्टॉपलिस्ट से एक कस्टम स्टॉपलिस्ट बनाएं।
  3. इस लेख से परिचित होने के बाद जोड़े गए स्टॉपवर्ड देखने के लिए एक T-SQL क्वेरी चलाएँ।

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL सर्वर में स्क्वायर ब्रैकेट का उपयोग न करने का कोई तरीका है?

  2. मैं SQL सर्वर 2008 प्रबंधन स्टूडियो में टेक्स्ट या वर्कर (MAX) कॉलम की पूरी सामग्री कैसे देखूं?

  3. आसान उदाहरणों के माध्यम से SQL सर्वर पदानुक्रम आईडी का उपयोग कैसे करें

  4. एसएसआईएस पैकेज का उपयोग कर डेटाबेस में एक्सएमएल फाइल कैसे लोड करें?

  5. एक स्ट्रिंग में पहला गैर-संख्यात्मक वर्ण खोजने के लिए SQL