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

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

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

लेख पूर्ण-पाठ खोज को सटीक रखने और शोर शब्दों से बचने के लिए स्टॉपवर्ड और स्टॉपलिस्ट के महत्व पर भी प्रकाश डालता है।

स्टॉपवर्ड और स्टॉपलिस्ट को समझना

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

एक स्टॉपलिस्ट

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

एक स्टॉपवर्ड

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

Microsoft प्रलेखन के अनुसार, एक स्टॉपवर्ड एक विशिष्ट भाषा में कुछ अर्थ वाला शब्द हो सकता है, या यह बिना किसी भाषाई मूल्य के कुछ टोकन हो सकता है। दोनों ही मामलों में, यह पूर्ण-पाठ खोज के लिए बेकार है।

स्टॉपवर्ड के उदाहरण

निम्नलिखित (ब्रिटिश/अमेरिकी) अंग्रेजी भाषा में स्टॉपवर्ड हैं:

  • के रूप में
  • पर
  • होना
  • क्योंकि
  • वह
  • किया

चूंकि उपरोक्त शब्द पूर्ण-पाठ खोज में योगदान नहीं करते हैं, वे एक पूर्ण वाक्य को समझने के महत्व के बावजूद, स्टॉपवर्ड हैं।

सिस्टम स्टॉपलिस्ट

ब्रिटिश अंग्रेजी सहित प्रत्येक समर्थित भाषा की एक डिफ़ॉल्ट या सिस्टम स्टॉपलिस्ट होती है जिसे विशेष आवश्यकताओं के अनुसार संशोधित किया जा सकता है।

कस्टम स्टॉपलिस्ट

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

भाषाएं और स्टॉपलिस्ट

पूर्ण-पाठ खोज कई अलग-अलग भाषाओं का समर्थन करती है। प्रत्येक समर्थित भाषा में डिफ़ॉल्ट रूप से कम से कम एक सिस्टम स्टॉपलिस्ट होती है। हालांकि, सिस्टम और कस्टम स्टॉपलिस्ट दोनों सहित किसी भी भाषा के लिए कई स्टॉपलिस्ट हो सकती हैं।

समर्थित भाषाओं की सूची

हम पूर्ण-पाठ खोज के साथ उपयोग की जाने वाली सभी समर्थित भाषाओं की सूची को शीघ्रता से देख सकते हैं। इसके लिए निम्न T-SQL स्क्रिप्ट चलाएँ:

-- List of Full-Text Search supported languages
SELECT ftl.lcid,ftl.name FROM sys.fulltext_languages ftl

परिणाम इस प्रकार हैं:

SQL सर्वर 2016 इंस्टेंस पर क्वेरी कुल 53 भाषाएँ लौटाती है।

पूर्ण-पाठ खोज के साथ स्टॉपवर्ड और स्टॉपलिस्ट का उपयोग करना

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

आवश्यकताएं

सबसे पहले, आपको वॉकथ्रू को सही ढंग से लागू करने के लिए निम्नलिखित आवश्यकताओं को सुनिश्चित करने की आवश्यकता है:

  • पूर्ण-पाठ खोज की बुनियादी समझ होना
  • एसक्यूएल सर्वर में पूर्ण-पाठ खोज को लागू करने की क्षमता
  • आपके द्वारा उपयोग की जाने वाली SQL आवृत्ति पर पूर्ण-पाठ खोज विकल्प सक्षम/स्थापित होने की उपस्थिति

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

  • शुरुआती लोगों के लिए SQL सर्वर 2016 में पूर्ण-पाठ खोज लागू करना
  • उन्नत उपयोगकर्ताओं के लिए SQL सर्वर 2016 में पूर्ण-पाठ खोज लागू करना

पूर्ण-पाठ खोज स्थिति जांचें

यह जांचने के लिए निम्न क्वेरी चलाएँ कि क्या आपने अपने SQL इंस्टेंस में पूर्ण-पाठ खोज स्थापित किया है:

-- Is Full-Text Search installed then 1 or 0
SELECT fulltextserviceproperty('IsFulltextInstalled') as [Full-Text Search]

उपरोक्त स्क्रिप्ट का परिणाम 1 इस प्रकार लौटना चाहिए:

अगर आपको 1 के अलावा कोई नंबर मिल रहा है, तो ऊपर बताए गए लेखों को दोबारा देखें।

सेटअप नमूना डेटाबेस (WatchReviewsStoplist)

सबसे पहले, आपको WatchReviewsStoplist . नामक एक नमूना डेटाबेस सेट करना होगा . नीचे दी गई स्क्रिप्ट का उपयोग करें:

-- Create WatchReviewsStoplist database
CREATE DATABASE WatchReviewsStoplist;
GO

-- Connect to the sample database
USE WatchReviewsStoplist

-- (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-01-01 00:00:00', N'Atif', 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-01-02 00:00:00', N'Qasim', 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-01-03 00:00:00', N'Martin', N'Hi, I have just purchased this Casio black digital watch which is excellent and has features like alarm, stopwatch, date and timer. ')
INSERT INTO [dbo].[WatchReview] ([ReviewId], [Date], [Person], [Details]) VALUES (4, N'2020-01-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-01-11 00:00:00', N'Sarah', 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

नमूना डेटाबेस जांचें

नमूना डेटाबेस में तालिका सामग्री देखने के लिए निम्न T-SQL स्क्रिप्ट चलाएँ:

-- Check sample database
SELECT wr.ReviewId,wr.Person,wr.Details FROM dbo.WatchReview wr

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

स्टॉपलिस्ट परिदृश्य

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

इन आवश्यकताओं को पूरा करने के लिए, हमें पहले पूर्ण-पाठ खोज सेट करना होगा। इसका अर्थ है निम्नलिखित क्रियाएं करना:

  • एक पूर्ण-पाठ कैटलॉग बनाएं
  • खाली कस्टम या उपयोगकर्ता-परिभाषित स्टॉपलिस्ट बनाएं
  • एक पूर्ण-पाठ अनुक्रमणिका बनाएं

पूर्ण-पाठ कैटलॉग बनाएं

निम्नलिखित स्क्रिप्ट के साथ एक पूर्ण-पाठ कैटलॉग बनाएं:

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

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

निम्नलिखित स्क्रिप्ट के साथ एक खाली कस्टम स्टॉपलिस्ट बनाएं:

-- Create empty custom stoplist
CREATE FULLTEXT STOPLIST [WatchReviewStoplist];
GO  

अब एक कस्टम स्टॉपलिस्ट बनाई गई है।

पूर्ण-पाठ अनुक्रमणिका बनाएं

अंत में, ब्रिटिश अंग्रेजी भाषा के लिए विवरण कॉलम में एक पूर्ण-पाठ अनुक्रमणिका बनाएं। यह पहले बनाई गई कस्टम स्टॉपलिस्ट को इंगित करेगा। इस क्रिया के लिए निम्न T-SQL स्क्रिप्ट का उपयोग करें:

-- Create Full-Text index pointing to the previously created Stoplist
CREATE FULLTEXT INDEX ON dbo.WatchReview(Details LANGUAGE [British English]) 
   KEY INDEX PK_WatchReview  
   WITH STOPLIST = WatchReviewStoplist;  
GO  

ग्राहक को उत्कृष्ट घड़ी का दर्जा दिलाने के लिए पूर्ण-पाठ क्वेरी

यह पता लगाने के लिए कि किस उत्पाद (घड़ी) को ग्राहकों द्वारा उत्कृष्ट अंक मिले हैं, निम्नलिखित पूर्ण-पाठ क्वेरी चलाएँ:

--Search customer reviews where the product was rated excellent
SELECT * FROM dbo.WatchReview
WHERE CONTAINS(Details,'excellent') 

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

हम देख सकते हैं कि ग्राहकों ने ब्लैक डिजिटल वॉच को बेहतरीन रेटिंग दी है। इसलिए, हम समीक्षाओं के आधार पर सर्वोत्तम उत्पाद जानते हैं, और हम समझते हैं कि पूर्ण-पाठ खोज ठीक काम करती है।

फिर भी, कुछ चिंताएँ हैं जिन्हें आप पाँच पंक्तियों की तालिका के लिए अनदेखा कर सकते हैं, लेकिन अगर तुरंत संबोधित किया जाता है तो यह अपेक्षाकृत बड़े परिणाम सेट में हमें प्रदर्शन और भंडारण लाभ प्राप्त कर सकता है।

संपूर्ण-पाठ क्वेरी के साथ शोर शब्द 'Hi' खोजें

फुल-टेक्स्ट इंडेक्स से जुड़े कई शोर शब्द हैं। जल्द ही वे बोझ बन सकते हैं। साथ ही, वे खोज के लिए किसी काम के नहीं हैं।

आइए देखें कि क्या शोर शब्द नमस्ते . है पूर्ण-पाठ खोज परिणामों में मौजूद है क्योंकि इसे बाहर करना बेहतर है।

पूर्ण-पाठ क्वेरी को निम्नानुसार चलाएँ:

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

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

लौटाए गए परिणाम बताते हैं कि "Hi" शब्द पूर्ण-पाठ खोज परिणामों का हिस्सा है। इस प्रकार, हमें इसे बाहर करने की आवश्यकता है - यह खोज के लिए अर्थहीन है और किसी भी विश्लेषण में मदद नहीं करता है।

स्टॉपवर्ड हाय जोड़ने के लिए स्टॉपलिस्ट बदलें

हम स्टॉपवर्ड जोड़ देंगे नमस्ते हमारी कस्टम स्टॉपलिस्ट को बदलकर ताकि इसे पूर्ण-पाठ खोज द्वारा अनुक्रमित नहीं किया जा सके और स्थान बचाने और खोज को बेहतर बनाने के लिए पूर्ण-पाठ प्रश्नों द्वारा वापस नहीं किया जाना चाहिए:

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

नॉइज़ शब्द 'Hi' को स्टॉपवर्ड के रूप में जोड़ने के बाद फिर से खोजें

शोर शब्द हाय को स्टॉपलिस्ट में जोड़ने के बाद खोजें:

--Search Noise word 'Hi' after it has been added as a stopword
SELECT * FROM dbo.WatchReview
WHERE CONTAINS(Details,'Hi')

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

जोड़े गए स्टॉपवर्ड जांचें

कभी भी, आप स्टॉपलिस्ट में जोड़े गए स्टॉपवर्ड्स की जांच कर सकते हैं। इसके लिए निम्न स्क्रिप्ट चलाएँ:

-- Check added stopwords 
SELECT * FROM sys.fulltext_stopwords

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

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

करने योग्य चीज़ें

अब जब आप स्टॉपलिस्ट बना सकते हैं और उनमें स्टॉपवर्ड जोड़ सकते हैं, तो अपने कौशल को और बेहतर बनाने के लिए निम्नलिखित प्रयास करें:

  • इस वॉकथ्रू में बनाई गई अपनी कस्टम स्टॉपलिस्ट में 'I,' 'यह,' 'जस्ट,' 'शोर शब्दों के रूप में शब्द जोड़ें।
  • वाकथ्रू के अंत में हमारे द्वारा निर्दिष्ट स्क्रिप्ट को चलाकर जोड़े गए स्टॉपवर्ड की जाँच करें।

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. डेटाबेस क्या है, डेटाबेस क्यों है?

  2. XML को SQL सर्वर में पार्स करें

  3. XML क्रमांकन के लिए StringWriter का उपयोग करना

  4. SQL 2005 में UTC और स्थानीय (यानी PST) समय के बीच प्रभावी रूप से दिनांक परिवर्तित करना

  5. मैं तालिका में डुप्लिकेट पंक्तियों को कैसे हटा सकता हूं