La création et la gestion des listes de mots vides constituent l'un des principaux composants responsables de l'amélioration des performances de la recherche en texte intégral tout en réduisant la taille de l'index. Cet article vise à vous aider à maîtriser le travail en profondeur et à mettre en œuvre plusieurs stratégies pour créer des listes d'arrêt sur des exemples simples mais intéressants.
Nous soulignerons également l'importance des différentes méthodes pour générer des listes de mots vides et clarifierons comment choisir la méthode la plus appropriée.
Pourquoi maîtriser les listes d'arrêt
Lorsque nous parlons d'utiliser des listes de mots vides concernant la recherche en texte intégral, la première question est de savoir pourquoi nous en apprenons tant sur ces listes de mots vides. La réponse réside dans les avantages évidents et cachés de l'utilisation de listes de mots vides avec la recherche en texte intégral. Il y a aussi des gains à long terme qu'ils peuvent apporter une fois mis en œuvre avec succès.
Importance des listes de mots vides
Une liste de mots vides est un composant spécifique à la langue de la recherche en texte intégral contenant des mots vides définis par l'utilisateur ou fournis par le système. Il doit exclure que ces mots fassent partie de la recherche en texte intégral.
Une conception de recherche en texte intégral sans liste de mots vides n'est pas l'utilisation optimale des composants spécifiques à la langue qui devraient améliorer l'efficacité et le temps de réponse de la recherche en texte intégral.
Prérequis
- Vous pouvez écrire et exécuter des scripts T-SQL.
- La recherche en texte intégral doit être installée sur votre instance SQL Server.
- Vous connaissez les concepts de base de la recherche en texte intégral et leur mise en œuvre.
- Vous avez une connaissance de base des mots vides et des listes vides.
Si vous ne disposez pas des informations nécessaires pour répondre aux exigences ci-dessus, reportez-vous aux articles ci-dessous :
- Mise en œuvre de la recherche en texte intégral dans SQL Server 2016 pour les débutants
- Mise en œuvre de la recherche en texte intégral dans SQL Server 2016 pour les utilisateurs avancés
- Comment utiliser les mots vides et la liste de mots vides pour améliorer la recherche en texte intégral (FTS) de SQL Server
Plusieurs stratégies de création de listes de mots vides
Il existe de nombreuses méthodes ou stratégies différentes, mais certaines d'entre elles sont bien meilleures que d'autres. Tout développeur de base de données ayant des compétences en implémentation de la recherche en texte intégral doit être familiarisé avec toutes les méthodes pour choisir la meilleure en cas de besoin.
Le moyen le plus efficace de comprendre ces différentes stratégies est de les appliquer à un exemple de base de données.
Configurer une base de données exemple
La première étape consiste à configurer la base de données pour exécuter des requêtes de texte intégral. Créez un exemple de base de données appelé 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
Aperçu des stratégies de listes d'arrêt multiples
Vous pouvez utiliser les trois méthodes/stratégies suivantes pour créer une liste de mots vides et empêcher les mots parasites de faire partie de vos requêtes de recherche en texte intégral :
- Créer une liste de mots vides personnalisée
- Créer une liste de mots vides système
- Créer une liste de mots vides à partir d'une liste de mots vides personnalisée (ou système)
Prérequis pour la liste de mots vides
N'oubliez pas qu'avant de créer une liste de mots vides, vous devez effectuer les opérations suivantes :
- Créer un index unique sur l'une des colonnes de la table s'il n'y a pas de colonne de clé disponible (clé primaire).
- Créer un catalogue de texte intégral.
- Créer un index de texte intégral.
Créer une liste de mots vides personnalisée
Supposons qu'un index unique ou une colonne de clé primaire soit disponible (comme dans notre exemple de base de données). Nous créons une liste de mots vides personnalisée comme suit :
- Créer un catalogue de texte intégral.
- Créez une liste d'arrêt personnalisée vide.
- Créez un index de texte intégral avec la liste de mots vides personnalisée créée à l'étape 2.
Pour des informations détaillées, reportez-vous à l'article Comment utiliser les mots vides et la liste de mots vides pour améliorer la recherche en texte intégral (FTS) de SQL Server
Avantages et inconvénients des listes d'arrêt personnalisées
Le plus grand avantage de la création d'une liste de mots vides personnalisée est que vous pouvez en avoir le contrôle total et en garder une trace en ajoutant et en supprimant des mots que vous pensez être des mots parasites.
Il y a cependant un inconvénient à utiliser cette approche. La liste de mots vides est très limitée et n'inclura pas les mots vides recommandés par le système pour améliorer davantage les performances des requêtes de texte intégral.
Création d'une liste de mots vides système
Créez une liste de mots vides système (si la colonne de clé primaire ou l'index unique est fourni) comme suit :
- Créer un catalogue de texte intégral.
- Créer un index de texte intégral avec la liste de mots vides du système.
Nous nous préparons à utiliser la liste de mots vides du système en créant d'abord un catalogue de texte intégral :
-- Create Full-Text catalog
CREATE FULLTEXT CATALOG [WatchReviewCatalog] AS DEFAULT;
GO
Créez un index de texte intégral sur la colonne des avis (Détails) de la table WatchReview avec la liste de mots vides du système. Utilisez le script T-SQL suivant :
-- 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
Afficher la liste d'arrêt du système de langue anglaise
Vous pouvez afficher la liste des mots vides inclus dans la liste de mots vides du système de l'anglais britannique. Exécutez la requête SQL suivante :
-- 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'
Le résultat est le suivant :
Afficher les 3 avis les plus récents
Exécutez une vérification rapide par rapport à l'exemple de base de données nouvellement créé. Faites-le en obtenant les 3 meilleures critiques de montres les plus récentes de la WatchReview tableau :
-- 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
Le résultat est le suivant :
Vérification des mots vides en exécutant des requêtes de texte intégral
Nous pouvons exécuter des requêtes de texte intégral sur la table désignée. Ne soyez pas surpris si de nombreux mots parasites (inclus dans la liste de mots vides du système pour améliorer les performances) n'apparaissent pas dans les requêtes de texte intégral. Cela signifie que notre liste de mots vides système fait correctement son travail.
Comme nous pouvons le voir, le mot "ceci" est présent dans le top 3 des avis. Cependant, c'est un mot parasite lui-même reconnu par la liste de mots vides du système.
Vérifions si une recherche en texte intégral renvoie le mot parasite "ceci" inclus dans la liste d'arrêt du système :
--Run Full-Text query to Search for Noise word 'this'
SELECT * FROM dbo.WatchReview
WHERE CONTAINS(Details,'this')
Le jeu de résultats est ci-dessous :
Nous pouvons maintenant exécuter la requête de texte intégral pour rechercher le mot 'is' qui est un autre mot de bruit :
--Run Full-Text query to Search for Noise word 'is'
SELECT * FROM dbo.WatchReview
WHERE CONTAINS(Details,'is')
Le résultat de la requête est ci-dessous :
Nous pouvons voir que le mot "est" a également été empêché avec succès de faire partie du résultat de la requête de texte intégral en économisant des ressources précieuses.
Requête en texte intégral pour rechercher le mot "Salut"
Nous exécutons une requête de texte intégral pour rechercher le mot "Salut". Il ne fait pas partie de la liste de mots vides du système. Ainsi, la requête doit le retourner.
--Search Noise word 'Hi'
SELECT * FROM dbo.WatchReview
WHERE CONTAINS(Details,'Hi')
Le résultat est le suivant :
Nous avons obtenu tous les enregistrements contenant le mot "Salut". Cependant, nous aimerions l'exclure, car il s'agit d'un mot de bruit. Si nous utilisons la recherche en texte intégral dans notre analyse textuelle, ce mot peut nous détourner de l'objectif.
Cela nous amène à la troisième méthode :créer une liste de mots vides à partir d'une liste de mots vides personnalisée ou système.
Création d'une liste de mots vides personnalisée à partir de la liste de mots vides système
Créez une liste d'arrêt personnalisée appelée WatchMasterStoplist de la liste d'arrêt du système avec le script T-SQL suivant :
--Creating a custom stoplist WatchMasterStoplist from system stoplist
CREATE FULLTEXT STOPLIST [WatchMasterStoplist] FROM SYSTEM STOPLIST;
GO
Associer une nouvelle liste de mots vides personnalisée à l'index de texte intégral
Associez la liste de mots vides personnalisée nouvellement créée à l'index de texte intégral comme suit :
USE [WatchReviewsMasterStoplist]
GO
-- Associating new custom stoplist with Full-Text index
ALTER FULLTEXT INDEX ON [dbo].[WatchReview] SET STOPLIST = [WatchMasterStoplist]
Vérification de la liste d'arrêt personnalisée en recherchant le mot "ceci"
Vous pouvez vérifier rapidement si votre liste d'arrêt personnalisée comprend tous les mots parasites de la liste d'arrêt du système. Exécutez le même code que nous avons utilisé précédemment pour rechercher le mot "this".
--Run Full-Text query to Search for Noise word 'this'
SELECT * FROM dbo.WatchReview
WHERE CONTAINS(Details,'this')
Cette sortie doit être vide.
Ajout d'un nouveau mot de bruit "Salut" à la liste d'arrêt personnalisée
Nous devons ajouter le mot de bruit 'Salut' à la liste de mots vides personnalisée nouvellement créée. Exécutez le script suivant :
--Alter customer stoplist to add Hi noise word
ALTER FULLTEXT STOPLIST WatchMasterStoplist
ADD 'Hi' LANGUAGE 'British English';
Le jeu de résultats est ci-dessous :
La vérification finale
Nous allons maintenant exécuter la vérification finale de la requête Full-Text pour certains mots parasites ; nous la comparons à l'ensemble de résultats d'origine contenant ces mots parasites.
Par exemple, si nous nous concentrons sur le quatrième avis (classé par ReviewId ), qui contient des mots parasites, puis comparez les résultats avec les résultats de la requête de texte intégral, nous ne devrions voir aucun mot parasite.
Exécutez le script suivant pour effectuer la vérification finale par rapport à l'exemple de base de données :
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
Le résultat est le suivant :
Requête en texte intégral pour rechercher les avis sur les montres numériques
Nous pouvons maintenant exécuter nos requêtes de recherche en texte intégral avec la liste de mots vides en place. Le script T-SQL suivant nous informera des avis sur les montres numériques (exemple) :
USE WatchReviewsMasterStoplist
--Run Full-Text query to Search for digital watch reviews sample
SELECT * FROM dbo.WatchReview WHERE CONTAINS(Details,'digital')
Les résultats sont ci-dessous :
Toutes nos félicitations! Nous avons mis en œuvre avec succès les trois méthodes de création et d'association de listes de mots vides. Nous avons également examiné l'ajout de nouveaux mots aux listes de mots vides et la vérification des performances.
Pourtant, je recommande fortement la troisième méthode. Créez une liste de mots vides personnalisée à partir d'une liste de mots vides système, puis ajoutez des mots parasites pour améliorer votre recherche en texte intégral.
Choses à faire
Maintenant que vous connaissez bien les trois méthodes de création de listes de mots vides, vous pouvez faire quelques exercices pour améliorer vos compétences en analyse textuelle, comme les suivants :
- Ajoutez une liste de mots vides personnalisée à partir de la liste de mots vides du système par rapport à l'exemple de base de données, comme dans cet article.
- Créez une liste de mots vides personnalisée à partir de la liste de mots vides du système par rapport à l'exemple de base de données, comme dans cet article.
- Exécutez une requête T-SQL pour voir les mots vides ajoutés après vous être familiarisé avec cet article.