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

Cara menggunakan Stopwords dan Stoplist untuk meningkatkan Pencarian Teks Lengkap (FTS) SQL Server

Artikel saat ini adalah tentang penggunaan Stopwords dan Stoplist. Tujuannya adalah untuk membuat Pencarian Teks Lengkap lebih efisien dalam hal penyimpanan dan kinerja. Selain itu, pembaca artikel ini akan mendapatkan panduan penerapan Pencarian Teks Lengkap dengan Stopwords dan Stoplist.

Artikel ini juga menyoroti pentingnya Stopwords dan Stoplist(s) untuk menjaga Pencarian Teks Lengkap tetap akurat dan menghindari kata-kata yang mengganggu.

Memahami Stopword dan Stoplist

Pertama, mari kita perjelas inti dari Stopwords dan Stoplist. Kemudian kami akan melanjutkan menggunakannya untuk meningkatkan Pencarian Teks Lengkap.

Daftar Berhenti

Stoplist, seperti namanya, adalah daftar stopword. Jika dikaitkan dengan Pencarian Teks Lengkap, Stoplist dapat menyaring kata atau istilah yang tidak berarti, sehingga meningkatkan hasil pencarian.

Stopword

Stopword adalah kata yang memiliki peran kecil dalam Pencarian Teks Lengkap, meskipun secara tata bahasa penting. Oleh karena itu, stopword tidak penting dari perspektif Pencarian Teks Lengkap.

Menurut dokumentasi Microsoft, stopword dapat berupa kata dengan beberapa arti dalam bahasa tertentu, atau mungkin beberapa tanda tanpa nilai linguistik. Dalam kedua kasus, Pencarian Teks Lengkap tidak berguna.

Contoh Stopword

Berikut ini adalah stopword dalam bahasa Inggris (Inggris/Amerika):

  • sebagai
  • di
  • menjadi
  • karena
  • dia
  • sudah

Karena kata-kata di atas tidak berkontribusi pada Pencarian Teks Lengkap, kata-kata tersebut adalah stopwords, meskipun memiliki arti penting dalam memahami kalimat lengkap.

Daftar Berhenti Sistem

Setiap bahasa yang didukung, termasuk British English, memiliki default atau daftar henti sistem yang dapat dimodifikasi sesuai dengan persyaratan tertentu.

Daftar Berhenti Kustom

Pengguna dapat membuat stoplist mereka sendiri/kustom, menggunakan stoplist sistem, atau dari awal. Akan sangat membantu untuk mencegah kata-kata bising menjadi bagian dari hasil Pencarian Teks Lengkap.

Bahasa dan Stoplist

Pencarian Teks Lengkap mendukung banyak bahasa yang berbeda. Setiap bahasa yang didukung memiliki setidaknya satu daftar berhenti sistem secara default. Namun, ada beberapa stoplist untuk bahasa apa pun, termasuk sistem dan stoplist khusus.

Daftar bahasa yang didukung

Kami dapat dengan cepat memeriksa daftar semua bahasa yang didukung yang digunakan dengan Pencarian Teks Lengkap. Untuk ini, jalankan skrip T-SQL berikut:

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

Hasilnya adalah sebagai berikut:

Kueri pada instans SQL Server 2016 mengembalikan total 53 bahasa.

Menggunakan Stopwords dan Stoplist dengan Pencarian Teks Lengkap

Sekarang, kita akan mendapatkan pengalaman langsung dalam membuat stoplist dari stopword yang ditentukan oleh pengguna. Kemudian, kami akan menggunakannya untuk Pencarian Teks Lengkap sebagai panduan. Ini akan menjadi seperti skenario waktu nyata.

Prasyarat

Pertama-tama, Anda perlu memastikan persyaratan berikut untuk menerapkan panduan dengan benar:

  • Memiliki pemahaman dasar tentang Penelusuran Teks Lengkap
  • Kemampuan untuk mengimplementasikan Pencarian Teks Lengkap di SQL Server
  • Keberadaan opsi Pencarian Teks Lengkap diaktifkan/diinstal pada contoh SQL yang Anda rencanakan untuk digunakan

Untuk memastikan prasyarat tersebut, baca artikel di bawah ini jika Anda sudah terbiasa dengan skrip T-SQL:

  • Menerapkan Pencarian Teks Lengkap di SQL Server 2016 untuk pemula
  • Menerapkan Pencarian Teks Lengkap di SQL Server 2016 untuk Pengguna Tingkat Lanjut

Periksa status Pencarian Teks Lengkap

Jalankan kueri berikut untuk memeriksa apakah Anda telah menginstal Pencarian Teks Lengkap ke dalam instance SQL Anda:

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

Hasil dari script di atas harus mengembalikan 1 sebagai berikut:

Jika Anda mendapatkan nomor selain 1, lihat kembali artikel yang disebutkan di atas.

Menyiapkan Contoh Basis Data (WatchReviewsStoplist)

Pertama, Anda perlu menyiapkan database sampel bernama WatchReviewsStoplist . Gunakan skrip di bawah ini:

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

Periksa Contoh Basis Data

Jalankan skrip T-SQL berikut untuk melihat isi tabel dalam database sampel:

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

Outputnya adalah sebagai berikut:

Skenario Daftar Berhenti

Asumsikan bahwa kami telah meminta tim pengembangan untuk meningkatkan Pencarian Teks Lengkap untuk ulasan pelanggan. Mereka harus melakukannya dengan mengecualikan kata-kata bising. Dengan cara ini, Pencarian Teks Lengkap tetap efisien dan juga fokus.

Untuk memenuhi persyaratan ini, pertama-tama kita perlu menyiapkan Pencarian Teks Lengkap. Ini berarti mengambil tindakan berikut:

  • Buat Katalog Teks Lengkap
  • Buat Stoplist kustom atau buatan pengguna yang kosong
  • Buat indeks Teks Lengkap

Buat Katalog Teks Lengkap

Buat katalog teks lengkap dengan skrip berikut:

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

Buat Stoplist Kustom yang kosong

Buat stoplist kustom kosong dengan skrip berikut:

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

Daftar berhenti khusus sekarang telah dibuat.

Buat Indeks Teks Lengkap

Terakhir, buat Indeks Teks Lengkap di kolom Detail untuk bahasa Inggris Inggris. Ini akan menunjuk ke stoplist khusus yang dibuat sebelumnya. Gunakan skrip T-SQL berikut untuk tindakan ini:

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

Kueri Teks Lengkap untuk mendapatkan jam tangan luar biasa yang dinilai pelanggan

Jalankan kueri Teks Lengkap berikut untuk mengetahui produk (jam tangan) mana yang mendapat nilai sangat baik dari pelanggan:

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

Hasilnya di bawah ini:

Kita dapat melihat bahwa pelanggan telah memberikan peringkat yang sangat baik untuk jam tangan digital hitam. Oleh karena itu, kami mengetahui produk terbaik berdasarkan ulasan, dan kami memahami bahwa Pencarian Teks Lengkap berfungsi dengan baik.

Namun, ada beberapa kekhawatiran yang mungkin Anda abaikan untuk tabel berisi lima baris, tetapi hal itu dapat memberi kami manfaat kinerja dan penyimpanan dalam kumpulan hasil yang relatif besar jika ditangani segera.

Telusuri kata berisik 'Hai' dengan kueri Teks Lengkap

Ada banyak kata-kata derau yang dilampirkan pada indeks Teks Lengkap. Segera, mereka bisa menjadi beban. Plus, mereka tidak berguna untuk pencarian.

Mari kita periksa apakah kata derau Hai ada dalam hasil Pencarian Teks Lengkap karena lebih baik untuk mengecualikannya.

Jalankan kueri Teks Lengkap sebagai berikut:

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

Hasilnya di bawah ini:

Hasil yang dikembalikan menunjukkan bahwa kata “Hai” adalah bagian dari hasil pencarian Teks Lengkap. Jadi, kita perlu mengecualikannya – tidak ada artinya untuk pencarian dan tidak membantu analisis apa pun.

Ubah Stoplist untuk menambahkan Stopword Hai

Kami akan menambahkan stopword Hai dengan mengubah Daftar Stop kustom kami sehingga tidak dapat diindeks oleh pencarian Teks Lengkap dan tidak boleh dikembalikan oleh kueri Teks Lengkap untuk menghemat ruang dan meningkatkan pencarian:

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

Cari kembali kata derau 'Hai' setelah menambahkannya sebagai Stopword

Cari kata derau Hai setelah menambahkannya ke Daftar Stop:

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

Outputnya adalah sebagai berikut:

Periksa Stopword yang ditambahkan

Kapan saja, Anda dapat memeriksa stopword yang ditambahkan ke Stoplist. Jalankan skrip berikut untuk ini:

-- Check added stopwords 
SELECT * FROM sys.fulltext_stopwords

Hasilnya di bawah ini:

Selamat! Anda telah berhasil membuat stoplist dan menambahkan stopword ke dalamnya. Dengan cara ini, Anda membuat Pencarian Teks Lengkap lebih efisien baik dalam performa maupun penyimpanan.

Hal yang harus dilakukan

Sekarang setelah Anda dapat membuat stoplist dan menambahkan stopword ke dalamnya, coba yang berikut ini untuk lebih meningkatkan keterampilan Anda:

  • Tambahkan kata 'saya,' 'ini,' 'hanya', 'sebagai kata-kata bising ke stoplist kustom Anda yang dibuat dalam panduan ini.
  • Periksa stopword yang ditambahkan dengan menjalankan skrip yang kami tentukan di akhir panduan.

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bagaimana cara menetapkan hasil exec ke variabel sql?

  2. Menggunakan kembali SqlCommand?

  3. Lakukan while loop di SQL Server 2008

  4. Bagaimana cara menjatuhkan tabel jika ada?

  5. Apa cara terbaik untuk membuat dan mengisi tabel angka?