Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Implémentation de la recherche en texte intégral dans SQL Server 2016 pour les utilisateurs avancés

Cet article décrit les méthodes avancées d'utilisation de la recherche en texte intégral pour les professionnels des données. Il permet une meilleure expérience de recherche dans leur analyse de base de données au jour le jour.

De plus, les lecteurs iront au-delà des connaissances de base de la recherche en texte intégral et de sa mise en œuvre. Vous verrez l'importance d'une méthodologie de recherche avancée à l'aide de la recherche en texte intégral pour obtenir des résultats rapides et fiables.

Prérequis

Tout d'abord, passons en revue les prérequis puisque l'article est axé sur les utilisations avancées de la recherche en texte intégral.

Savoir-faire T-SQL

L'article suppose que pour implémenter la ou les procédures pas à pas, les lecteurs sont familiarisés avec l'écriture et l'exécution de scripts T-SQL sur des bases de données avec une compréhension de base de SQL Server.

Principes de base de la recherche en texte intégral

Cet article s'attend également à ce que les lecteurs aient une compréhension de base de la recherche en texte intégral.

Veuillez vous référer à la Mise en œuvre de la recherche en texte intégral dans SQL Server 2016 pour les débutants article si vous souhaitez vous familiariser avec les concepts de base et la mise en œuvre de la recherche en texte intégral via une ou plusieurs présentations.

Installation de la recherche en texte intégral

Supposons que la recherche en texte intégral a déjà été ajoutée à votre instance SQL.

Si vous ne l'avez pas encore fait, suivez les instructions de la section Mise en œuvre de la recherche en texte intégral dans SQL Server 2016 pour les débutants article pour vous aider à installer la recherche en texte intégral sur votre instance SQL.

Vous pouvez vérifier l'état de la recherche en texte intégral en exécutant le script suivant :

-- Est-ce que la recherche de texte intégral est installée, puis 1 ou 0SELECT fulltextserviceproperty('IsFulltextInstalled') comme [Recherche de texte intégral]

Exemple de base de données SQLDevBlogV7

Créez et remplissez maintenant un exemple de base de données appelé SQLDevBlogV7 avoir des Notes colonne de VARCHAR(MAX) taper. Pour ce faire, exécutez le script T-SQL suivant sur la base de données principale :

-- Créer une base de données exemple (SQLDevBlogV7)CREATE DATABASE SQLDevBlogV7;GOUSE SQLDevBlogV7;-- (1) Créer une table d'articles dans la base de données exempleCREATE TABLE [dbo].[Article] ([ArticleId] INT IDENTITY (1, 1) NOT NULL,[Catégorie] VARCHAR (50) NULL,[Auteur] VARCHAR (50) NULL,[Titre] VARCHAR (150) NULL,[Publié] DATETIME2 (7) NULL,[Notes] VARCHAR (MAX) NULL,CONSTRAINT [PK_Article ] PRIMARY KEY (ArticleId));GO-- Réinitialiser les données tabulairesTRUNCATE TABLE dbo.ArticleGO-- Ajouter des données à la tableSET IDENTITY_INSERT [dbo].[Article] ONINSERT INTO [dbo].[Article] ([ArticleId], [Category] , [Auteur], [Titre], [Publié], [Notes]) VALEURS (1, N'Développement', N'Atif', N'Introduction à la Programmation T-SQL', N'2017-01-01 00 :00:00', N'L'article concerne la programmation T-SQL couvrant les instructions les plus couramment utilisées, y compris SELECT.')INSERT INTO [dbo].[Article] ([ArticleId], [Category], [Author], [Title] , [Publié], [Notes]) VALEURS (2, N'Testing', N'Peter', N'Database Unit Testing Fundamentals', N'2017-01-10 00:00:00', N'Ceci est un article sur les tests unitaires de base de données pour se familiariser avec les tests unitaires à l'aide d'exemples et de procédures pas à pas.')INSERT INTO [dbo].[Article] ([ArticleId], [Category], [Author], [Title] , [Publié], [Notes]) VALUES (3, N'Data Analysis', N'Haroon', N'Learn Basic Data Analysis with SQL Window Functions', N'2019-06-12 00:00:00', N'Cet article concerne les fonctions de fenêtre T-SQL (Transact-SQL) et leur utilisation de base dans les tâches d'analyse de données quotidiennes.')INSERT INTO [dbo].[Article] ([ArticleId], [Category], [Auteur], [Titre], [Publié], [Notes]) VALUES (4, N'Development', N'Peter', N'Common Table Expressions (CTE)', N'2017-02-10 00:00 :00', N'Ceci est un article qui explique comment utiliser CTE dans T-SQL pour écrire des requêtes complexes.')INSERT INTO [dbo].[Article] ([ArticleId], [Category], [Author], [ Titre], [Publié], [Notes]) VALEURS (5, N'Testing', N'Sadaf', N'Manual Testing vs. Automated Testing', N'2017-03-20 00:00:00', N 'Cet article est basé sur l'analyse comparative entre les tests manuels et des tests automatisés. Cet article utilise tSQLt pour donner des exemples de tests automatisés.')INSERT INTO [dbo].[Article] ([ArticleId], [Category], [Author], [Title], [Published], [Notes]) VALUES (6 , N'Testing', N'Atif', N'Beyond Database Unit Testing', N'2017-11-10 00:00:00', N'Il y a beaucoup à faire en ce qui concerne les tests unitaires de la base de données et cet article concerne davantage les méthodes de niveau avancé pour écrire et exécuter des tests unitaires SQL à l'aide de tSQLt.')INSERT INTO [dbo].[Article] ([ArticleId], [Category], [Author], [Title], [Published ], [Notes]) VALUES (7, N'Testing', N'Sadaf', N'Cross Database Unit Testing', N'2017-12-20 00:00:00', N'Cet article couvre un scénario complexe de tests unitaires de bases de données croisées à l'aide d'outils de test tiers.')INSERT INTO [dbo].[Article] ([ArticleId], [Category], [Author], [Title], [Published], [Notes]) VALUES (8 , N'Développement', N'Haroon', N'Comment utiliser correctement la fonction T-SQL IsNumeric', N'2018-01-10 00:00:00', N'Il s'agit de la fonction IsNumeric qui détermine si un expression peut b e évalué comme un nombre. Ici, l'expression peut être constituée de symboles et d'opérateurs qui sont évalués comme une seule valeur de données par le moteur de base de données SQL Server.')INSERT INTO [dbo].[Article] ([ArticleId], [Category], [Author], [Title ], [Publié], [Notes]) VALEURS (9, N'Testing', N'Sadaf', N'Scripting and Testing Database pour débutants', N'2018-02-15 00:00:00', N' Cet article est basé sur la création de scripts et les tests de bases de données SQL à l'aide d'outils et de technologies modernes.')INSERT INTO [dbo].[Article] ([ArticleId], [Category], [Author], [Title], [Published], [Notes]) VALUES (10, N'Development', N'Atif', N'Advanced Database Development Methods', N'2018-07-10 00:00:00', N'This article parle des outils modernes de développement de base de données y compris SSDT, SSMS, etc.')INSERT INTO [dbo].[Article] ([ArticleId], [Category], [Author], [Title], [Published], [Notes]) VALUES (11, N'Testing' , N'Sadaf', N'Comment écrire des tests unitaires pour votre base de données', N'2018-11-10 00:00:00', N'Cet article concerne l'écriture de tests unitaires pour votre base de données à l'aide de MST est.')INSERT INTO [dbo].[Article] ([ArticleId], [Category], [Auteur], [Titre], [Publié], [Notes]) VALUES (12, N'Développement', N'Peter ', N'Database Development using Modern Tools', N'2018-12-10 00:00:00', N'Dans cet article, un scénario de développement de base de données est décrit à l'aide de SQL Server Data Tools et de SQL Server Management Studio. ')INSERT INTO [dbo].[Article] ([ArticleId], [Category], [Auteur], [Titre], [Publié], [Notes]) VALUES (13, N'DLM', N'Atif', N'Concevoir, développer et déployer une base de données', N'2019-01-01 00:00:00', N'Les concepts autour d'Azure DevOps et leur mise en œuvre sont au centre de cet article.')INSERT INTO [dbo]. [Article] ([ArticleId], [Category], [Author], [Title], [Published], [Notes]) VALUES (14, N'DLM', N'Peter', N'How to Apply Database Lifecycle Management ', N'2019-02-10 00:00:00', N'Cet article concerne DLM.')INSERT INTO [dbo].[Article] ([ArticleId], [Category], [Auteur], [Titre ], [Publié], [Notes]) VALUES (15, N'Testing', N'Saqib', N'SQL Unit Testing Stored Procedures', N'2019-03-10 00:00:00', N'This article explique comment écrire des tests unitaires pour une procédure.')INSERT INTO [dbo].[Article] ([ArticleId], [Category], [Author], [Title], [Published], [Notes]) VALUES ( 16, N'Reporting', N'Haroon', N'SSRS Reports Development in Simple Terms', N'2019-07-10 22:26:42', N'The article is dédié aux fondamentaux du développement de SQL Server Reporting Services (SSRS) et destiné aux débutants et aux professionnels intéressés par le développement de bases de données.')SET IDENTITY_INSERT [dbo].[Article] OFF

Créer un catalogue de texte intégral

Créez un catalogue de texte intégral à l'aide du script ci-dessous ou à l'aide de l'assistant de configuration :

-- Créer un catalogue de texte intégralCREATE FULLTEXT CATALOG ArticleCatalog AS DEFAULT;GO

Définir l'index de texte intégral sur les notes

Une fois le catalogue créé avec succès, définissez un index de texte intégral basé sur les Notes colonne comme suit (ou en utilisant l'assistant de configuration) :

-- Définir l'index de texte intégralCREATE FULLTEXT INDEX ON dbo.Article(Notes)KEY INDEX PK_ArticleWITH STOPLIST =SYSTEM;GO

Vérification du catalogue de texte intégral et de l'index de texte intégral

Développez les nœuds associés pour voir l'index de texte intégral et le catalogue de texte intégral que vous venez de créer :

Vous êtes maintenant prêt à exécuter des requêtes de texte intégral sur la table qui vous intéresse - dans notre cas, il s'agit de Article .

Terme simple

La recherche d'un mot ou d'une expression est plus facile que la recherche d'autres formulaires, c'est pourquoi on l'appelle également un terme simple.

Reportez-vous à la section Mise en œuvre de la recherche en texte intégral dans SQL Server 2016 pour les débutants article pour implémenter une forme de base d'une requête Full-Text pour rechercher un mot ou une phrase.

Voyons maintenant quelques-unes des recherches avancées potentielles effectuées à l'aide de la recherche en texte intégral.

Recherche en texte intégral avancée à l'aide d'un préfixe

Un terme de préfixe fait référence à un mot préfixé commençant par quelques lettres - il peut alors s'agir de tout ce qui correspond à ce modèle. Vous pouvez le considérer comme une version de recherche en texte intégral de LIKE avec mot préfixé*.

Un mot ou des mots dans une phrase peuvent également avoir un ou plusieurs termes préfixés.

Exemple

Par exemple, rechercher le mot data* peut nous obtenir n'importe quoi en commençant par les données de cette colonne telles que les données, la base de données, les bases de données, etc.

Recherche d'articles liés au développement à l'aide d'un préfixe

Imaginons que vous soyez chargé de rechercher des articles liés au développement pour les organiser dans un groupe de développement distinct pour une meilleure expérience de visualisation du site Web.

La solution est la « recherche de termes préfixés » à l'aide d'une requête de texte intégral comme suit :

--Implementing Prefix Term Full-Text Search to find dev related articlesSELECT Title,Notes FROM dbo.Article WHERE CONTAINS(NOTES,'"dev*"')

Les résultats ont également montré l'article sur DevOps - ce n'est pas lié au développement, c'est pourquoi nous exécutons un autre script. Il trouvera plus rapidement tous les articles liés au développement à l'aide d'une requête en texte intégral, à l'exception de DevOps, comme suit :

--Implementing Prefix Term Full-Text Search to find dev articles related but not DevOpsSELECT Title,Notes FROM dbo.Article WHERE CONTAINS(NOTES,'"dev*"') AND NOT CONTAINS(Notes,'DevOps') 

Le résultat est le suivant :

Notez également qu'il est essentiel de mettre le mot de recherche entre guillemets comme indiqué dans les scripts ci-dessus. En procédant ainsi, nous implémentons correctement la recherche par terme de préfixe.

Recherche en texte intégral avancée à l'aide de la forme flexionnelle

Parfois, vous devez rechercher les formes flexionnelles d'un mot qui signifient les formes possibles qu'un mot peut prendre.

Exemple

Un exemple simple est le mot "Déployer" qui peut avoir les formes flexionnelles suivantes :

  1. Déploie
  2. Déployé
  3. Déploiement
  4. Déploiements
  5. Déploiement

Formes flexionnelles de Write Search

Voyons ce qui se passe si nous exécutons une requête de texte intégral pour trouver des notes pour toutes les formes flexionnelles du mot écrire :

-- Recherche de formes flexionnelles d'écriture de mots à l'aide de la recherche en texte intégralSELECT Title,Notes FROM dbo.Article WHERE CONTAINS(NOTES,'FORMSOF(INFLECTIONAL,write)')

La colonne Notes avec des lignes contenant à la fois écrire et écrire sont affichés où écrit est une forme flexionnelle de écrire .

Formes flexionnelles de la recherche technologique

Si vous êtes chargé de rechercher tous les articles contenant différentes formes du mot technologie, implémentez une forme flexionnelle de la recherche de mots à l'aide du script T-SQL suivant :

-- Recherche de formes flexionnelles de la technologie des mots à l'aide de la recherche en texte intégralSELECT Title,Notes FROM dbo.Article WHERE CONTAINS(NOTES,'FORMSOF(INFLECTIONAL,technology)')

Le résultat est le suivant :

Aucune recherche d'unité de terme de préfixe

Construisons maintenant une requête Full-Text plus complexe. Il recherchera tous les articles pour trouver une forme flexionnelle du mot test mais sans terme préfixe unit (hors tests unitaires) car nous recherchons les articles sur les tests, pas sur les tests unitaires :

-- Recherche de formes flexionnelles de test de mot à l'exclusion du terme de préfixe d'unité à l'aide de la recherche en texte intégralSELECT Title,Notes FROM dbo.Article WHERE CONTAINS(NOTES,'FORMSOF(INFLECTIONAL,test)') AND NOT CONTAINS(NOTES,'"unit *"')

Par conséquent, nous ne verrons que les enregistrements où manuel , automatisé, ou simplement tester les mots sont mentionnés hors tests unitaires articles.

Recherche en texte intégral avancée à l'aide de la recherche de proximité

Utilisons notre expérience pratique de l'utilisation de la recherche de proximité en exécutant une requête en texte intégral.

Recherche de proximité/terme

Cette forme de recherche en texte intégral vous permet de rechercher des mots ou des phrases proches les uns des autres. C'est très pratique pour trouver des enregistrements lorsque certains mots ou expressions sont situés très étroitement.

Exemple

Un bon exemple de recherche de proximité consiste à rechercher des enregistrements où le mot football est près du mot ground pour obtenir des informations sur les terrains de football uniquement.

Rechercher "Advanced Near Testing" à l'aide du terme de proximité

Si vous souhaitez rechercher tous les articles où les tests avancés sont mentionnés sans suivre un ordre particulier, votre meilleure option est d'utiliser la recherche de proximité étant donné que la recherche en texte intégral est configurée sur la colonne souhaitée.

Écrivez le script suivant pour rechercher le mot avancé à côté du mot test dans n'importe quel ordre dans la colonne Notes :

-- Recherche d'un test de mot proche avancé à l'aide de la recherche de proximité (recherche en texte intégral)SELECT NOTES FROM dbo.Article WHERE CONTAINS (NOTES,'NEAR(advanced,testing)')

Les résultats sont les suivants :

Les résultats nous ont montré les notes où les tests sont mentionnés par des méthodes de niveau avancé et c'est ce que nous recherchions. Nous pouvons également spécifier la distance entre deux mots.

Recherche avec pas plus de 2 mots séparés

Enfin, exécutez une requête de texte intégral à l'aide d'un terme de proximité pour découvrir chaque scénario de base de données où le mot base de données est près du mot scénario mais pas plus de 2 mots à part.

-- Rechercher une base de données de mots à proximité d'un scénario de mots distants de 2 mots au maximum à l'aide de la recherche de proximité (recherche en texte intégral)SELECT NOTES FROM dbo.Article WHERE CONTAINS (NOTES,'NEAR((database,scenario),2,TRUE )')

Le résultat est le suivant :

En conséquence, l'article où scénario de développement de base de données est mentionné a été affiché avec succès.

Avec cela, vous avez appris avec succès à écrire des requêtes de texte intégral avancées sur n'importe quelle colonne. Cela vous aide à répondre aux exigences de recherche sophistiquées pour être prêt à exécuter la recherche en texte intégral dans vos scénarios de vie professionnelle, le cas échéant.

Choses à faire

Maintenant que vous savez écrire des requêtes Full-Text avancées, vous devriez essayer ces choses pour améliorer vos compétences :

  1. Essayez de rechercher tous les articles où le mot préfixé auto est utilisé.
  2. Gardant à l'esprit cet article, essayez d'écrire un script pour faire une recherche de proximité pour trouver toutes les lignes où le mot modern est près du mot outils .
  3. Essayez de trouver toutes les formes flexionnelles du mot écrit .