Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Menguasai Penggunaan Stoplist Dengan SQL Server Full-Text Search (FTS)

Membuat dan mengelola stoplist berfungsi sebagai salah satu komponen utama yang bertanggung jawab untuk meningkatkan kinerja Pencarian Teks Lengkap di samping mengurangi ukuran indeks. Artikel ini bertujuan untuk membantu Anda menguasai pekerjaan secara mendalam dan menerapkan beberapa strategi untuk membuat stoplist pada contoh sederhana namun menarik.

Kami juga akan menyoroti pentingnya berbagai metode untuk menghasilkan stoplist dan mengklarifikasi bagaimana memilih metode yang paling sesuai.

Mengapa Menguasai Stoplist

Ketika kita berbicara tentang menggunakan stoplist tentang Pencarian Teks Lengkap, pertanyaan pertama adalah mengapa kita belajar banyak tentang stoplist ini. Jawabannya terletak pada manfaat nyata dan tersembunyi dari penggunaan stoplist dengan Pencarian Teks Lengkap. Ada juga keuntungan jangka panjang yang mungkin didapat setelah diterapkan dengan sukses.

Pentingnya Stoplist

Stoplist adalah komponen khusus bahasa dari Pencarian Teks Lengkap yang berisi stopword yang ditentukan pengguna atau yang disediakan sistem. Itu harus mengecualikan kata-kata seperti itu agar tidak menjadi bagian dari Pencarian Teks Lengkap.

Desain Pencarian Teks Lengkap tanpa stoplist bukanlah penggunaan optimal dari komponen khusus bahasa yang seharusnya meningkatkan efisiensi dan waktu respons Pencarian Teks Lengkap.

Prasyarat

  1. Anda dapat menulis dan menjalankan skrip T-SQL.
  2. Pencarian Teks Lengkap harus diinstal ke dalam instance SQL Server Anda.
  3. Anda sudah familiar dengan konsep dan implementasi Pencarian Teks Lengkap dasar.
  4. Anda memiliki pengetahuan dasar tentang stopword dan stoplist.

Jika Anda kekurangan informasi untuk memastikan persyaratan di atas, lihat artikel di bawah ini:

  • Menerapkan Pencarian Teks Lengkap di SQL Server 2016 untuk pemula
  • Menerapkan Pencarian Teks Lengkap di SQL Server 2016 untuk Pengguna Tingkat Lanjut
  • Cara menggunakan Stopwords dan Stoplist untuk meningkatkan Pencarian Teks Lengkap (FTS) SQL Server

Berbagai Strategi Pembuatan Stoplist

Ada banyak metode atau strategi yang berbeda, tetapi beberapa di antaranya jauh lebih baik daripada yang lain. Setiap pengembang database dengan keterampilan implementasi Pencarian Teks Lengkap harus terbiasa dengan semua metode untuk memilih yang terbaik bila diperlukan.

Cara paling efektif untuk memahami berbagai strategi ini adalah dengan menerapkannya pada database sampel.

Menyiapkan Contoh Basis Data

Langkah pertama adalah menyiapkan database untuk menjalankan kueri Teks Lengkap. Buat database sampel bernama 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

Ringkasan Strategi Beberapa Stoplist

Anda dapat menggunakan tiga cara/strategi berikut untuk membuat stoplist dan mencegah kata-kata bising menjadi bagian dari kueri Pencarian Teks Lengkap Anda:

  1. Buat stoplist khusus
  2. Buat daftar berhenti sistem
  3. Buat stoplist dari stoplist kustom (atau sistem)

Prasyarat Daftar Stop

Ingatlah bahwa sebelum Anda membuat stoplist, Anda harus melakukan hal berikut:

  1. Buat indeks unik pada salah satu kolom tabel jika kolom kunci tidak tersedia (Kunci Utama).
  2. Buat Katalog Teks Lengkap.
  3. Buat Indeks Teks Lengkap.

Buat Stoplist Kustom

Asumsikan bahwa indeks unik atau kolom kunci utama tersedia (seperti dalam database sampel kami). Kami membuat stoplist khusus sebagai berikut:

  1. Buat Katalog Teks Lengkap.
  2. Buat stoplist khusus yang kosong.
  3. Buat Indeks Teks Lengkap dengan stoplist khusus yang dibuat pada langkah 2.

Untuk informasi rinci, lihat artikel Cara menggunakan Stopwords dan Stoplist untuk meningkatkan Pencarian Teks Lengkap (FTS) SQL Server

Pro dan Kontra dari Stoplist Kustom

Keuntungan terbesar dari membuat stoplist kustom adalah Anda dapat memiliki kontrol penuh atas itu dan melacaknya dengan menambahkan dan menghapus kata-kata yang menurut Anda merupakan kata-kata yang mengganggu.

Namun, ada kerugian untuk menggunakan pendekatan ini. Stoplist sangat terbatas, dan tidak akan menyertakan stopword yang direkomendasikan sistem untuk meningkatkan performa kueri Teks Lengkap lebih lanjut.

Membuat Daftar Berhenti Sistem

Buat daftar berhenti sistem (jika kolom kunci utama atau indeks unik disediakan) sebagai berikut:

  1. Buat Katalog Teks Lengkap.
  2. Buat Indeks Teks Lengkap dengan stoplist sistem.

Kami bersiap untuk menggunakan sistem stoplist dengan membuat Katalog Teks Lengkap terlebih dahulu:

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

Buat Indeks Teks Lengkap pada kolom ulasan (Rincian) tabel WatchReview dengan daftar stop sistem. Gunakan skrip T-SQL berikut:

-- 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  

Melihat Stoplist Sistem Bahasa Inggris

Anda dapat melihat daftar stopwords termasuk dalam sistem stoplist British English. Jalankan kueri SQL berikut:

-- 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'

Outputnya adalah sebagai berikut:

Lihat 3 Ulasan Teratas Terbaru

Jalankan pemeriksaan cepat terhadap database sampel yang baru dibuat. Lakukan dengan mendapatkan 3 ulasan jam tangan terbaru teratas dari WatchReview tabel:

-- 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

Outputnya adalah sebagai berikut:

Memeriksa Stopwords dengan menjalankan kueri Teks Lengkap

Kami dapat menjalankan kueri Teks Lengkap terhadap tabel yang dinominasikan. Jangan heran jika banyak kata derau (disertakan dalam daftar berhenti sistem untuk meningkatkan kinerja) tidak muncul di kueri Teks Lengkap. Ini berarti daftar stoplist sistem kami melakukan tugasnya dengan benar.

Seperti yang bisa kita lihat, kata 'ini' hadir di 3 ulasan teratas. Namun, itu adalah kata derau yang dikenali oleh stoplist sistem.

Mari kita periksa apakah Pencarian Teks Lengkap mengembalikan kata derau 'ini' termasuk dalam daftar berhenti sistem:

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

Kumpulan hasil di bawah ini:

Sekarang kita dapat menjalankan kueri Teks Lengkap untuk mencari kata ‘adalah’ yang merupakan kata kebisingan lain:

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

Output kueri di bawah ini:

Kita dapat melihat bahwa kata 'adalah' juga telah berhasil dicegah agar tidak menjadi bagian dari hasil kueri Teks Lengkap dengan menghemat sumber daya yang berharga.

Kueri Teks Lengkap untuk mencari kata 'Hai'

Kami menjalankan kueri Teks Lengkap untuk menelusuri kata ‘Hai.’ Ini bukan bagian dari daftar stop sistem. Jadi, kueri harus mengembalikannya.

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

Outputnya adalah sebagai berikut:

Kami mendapatkan semua catatan yang berisi kata ‘Hai.’ Namun, kami ingin mengecualikannya, karena itu adalah kata yang bising. Jika kita menggunakan Pencarian Teks Lengkap dalam analisis tekstual kita, kata ini dapat mengalihkan kita dari tujuan.

Ini membawa kita ke metode ketiga:membuat stoplist dari kustom atau sistem stoplist.

Membuat Daftar Berhenti Kustom dari Daftar Berhenti Sistem

Buat daftar berhenti khusus yang disebut WatchMasterStoplist dari stoplist sistem dengan skrip T-SQL berikut:

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

Mengaitkan Stoplist Kustom baru dengan indeks Teks Lengkap

Kaitkan stoplist khusus yang baru dibuat dengan indeks Teks Lengkap sebagai berikut:

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

Memeriksa Daftar Berhenti Kustom dengan Mencari Kata 'ini'

Anda dapat dengan cepat memeriksa apakah stoplist kustom Anda menyertakan semua kata-kata derau dari stoplist sistem. Jalankan kode yang sama yang kita gunakan sebelumnya untuk mencari kata 'ini'.

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

Keluaran ini harus kosong.

Menambahkan kata derau baru 'Hai' ke Daftar Berhenti Kustom

Kita perlu menambahkan kata berisik 'Hai' ke stoplist kustom yang baru dibuat. Jalankan skrip berikut:

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

Kumpulan hasil di bawah ini:

Pemeriksaan Terakhir

Sekarang kita akan menjalankan pemeriksaan kueri Teks Lengkap terakhir untuk beberapa kata derau – kami membandingkannya dengan kumpulan hasil asli yang berisi kata ganggu itu.

Misalnya, jika kita fokus pada ulasan keempat (diurutkan berdasarkan ReviewId ), yang memang mengandung beberapa kata derau, lalu membandingkan hasilnya dengan hasil kueri Teks Lengkap, kita tidak akan melihat kata ganggu.

Jalankan skrip berikut untuk melakukan pemeriksaan terakhir terhadap database sampel:

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

Outputnya adalah sebagai berikut:

Kueri Teks Lengkap untuk menelusuri ulasan jam tangan digital

Sekarang kita dapat menjalankan kueri Pencarian Teks Lengkap dengan stoplist di tempatnya. Skrip T-SQL berikut akan memberi tahu kami tentang ulasan jam tangan digital (contoh):

USE WatchReviewsMasterStoplist

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

Hasilnya di bawah ini:

Selamat! Kami telah berhasil menerapkan ketiga metode untuk membuat dan mengaitkan stoplist. Kami juga memeriksa penambahan kata baru ke stoplist dan memeriksa kinerjanya.

Namun, saya sangat merekomendasikan metode ketiga. Buat stoplist khusus dari stoplist sistem, lalu tambahkan kata-kata derau untuk meningkatkan Pencarian Teks Lengkap Anda.

Hal yang harus dilakukan

Sekarang setelah Anda mengetahui tiga metode untuk membuat stoplist, Anda dapat melakukan beberapa latihan untuk meningkatkan keterampilan analisis tekstual Anda, seperti berikut:

  1. Tambahkan stoplist khusus dari stoplist sistem ke database sampel, seperti di artikel ini.
  2. Buat stoplist khusus dari stoplist sistem terhadap database sampel, seperti di artikel ini.
  3. Jalankan kueri T-SQL untuk melihat stopword yang ditambahkan setelah memahami artikel ini.

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tips untuk Memindahkan Database SQL Server dari Satu Server ke Server Lain - Tutorial SQL oleh Rajan Singh

  2. kesalahan saat memasukkan ke dalam tabel yang memiliki alih-alih pemicu dari kerangka data entitas

  3. Bagaimana saya bisa MEMASUKKAN data ke dalam dua tabel secara bersamaan di SQL Server?

  4. Tampilan Pertama SQL Server 2022 - 5 Fitur Baru Teratas (Bonus 5 Fitur)

  5. SQL Server SHOWPLAN_TEXT