Ceci est la deuxième partie du matériel consacré à la recherche sémantique SQL Server . Dans l'article précédent, nous avons exploré les bases. Maintenant, nous allons nous concentrer sur la comparaison des documents stockés sur le système de fichiers Windows et l'analyse comparative avec la recherche sémantique dans SQL Server.
Effectuer une analyse comparative des documents basés sur le nom
Nous allons effectuer une analyse comparative des documents en fonction de leur dénomination standard. À ce stade, effectuons une vérification rapide en interrogeant EmployeesFilestreamSample base de données que nous avons configurée précédemment :
-- View stored documents managed by File Table to check
SELECT stream_id
,[name]
,file_type
,creation_time
FROM EmployeesFilestreamSample.dbo.EmployeesDocumentStore
Les résultats doivent nous montrer les documents stockés :
Liste de vérification de la recherche sémantique
Nous avons déjà la base de données et deux exemples de documents MS Word sur le système de fichiers à l'aide de la table de fichiers (vous pouvez vous référer à la partie 1 pour actualiser les connaissances si nécessaire). Cependant, cela ne le fait pas qualifient automatiquement nos documents pour le scénario de recherche sémantique.
La recherche sémantique peut être activée de l'une des manières suivantes :
- Si vous avez déjà configuré la recherche en texte intégral , vous pouvez activer la recherche sémantique en une seule étape.
- Vous pouvez configurer la recherche sémantique directement, mais vous devez également configurer la recherche en texte intégral avant.
Test de recherche en texte intégral avant la configuration de la recherche sémantique
Si une requête Full-Text fonctionne, il suffit d'activer la recherche sémantique. Pour vérifier cela, exécutez une requête Full-Text sur la table souhaitée :
-- Searching word Employee using Full-Text search against EmployeesDocumentStore File Table
SELECT [name]
FROM [EmployeesFilestreamSample].[dbo].[EmployeesDocumentStore]
WHERE CONTAINS(name,'Employee')
La sortie :
Ainsi, nous devons d'abord remplir les conditions requises pour la recherche en texte intégral, puis activer la recherche sémantique.
Activer la recherche sémantique pour l'utilisation
Au moins deux des points suivants sont nécessaires pour utiliser la recherche sémantique :
- Index unique
- Un catalogue en texte intégral
- Un index de texte intégral
Exécutez le script T-SQL suivant pour créer un index unique :
-- Create unique index required for Semantic Search
CREATE UNIQUE INDEX UQ_Stream_Id
ON EmployeesDocumentStore(stream_id)
GO
Créez un catalogue de texte intégral basé sur l'index unique nouvellement créé. Et ensuite, créez un index de texte intégral comme indiqué ci-dessous :
-- Getting Semantic Search ready to be used with File Table
CREATE FULLTEXT CATALOG EmployeesFileTableCatalog WITH ACCENT_SENSITIVITY = ON;
CREATE FULLTEXT INDEX ON EmployeesDocumentStore
(
name LANGUAGE 1033 STATISTICAL_SEMANTICS,
file_type LANGUAGE 1033 STATISTICAL_SEMANTICS,
file_stream TYPE COLUMN file_type LANGUAGE 1033 STATISTICAL_SEMANTICS
)
KEY INDEX UQ_Stream_Id
ON EmployeesFileTableCatalog WITH CHANGE_TRACKING AUTO, STOPLIST=SYSTEM;
Les résultats :
Test de recherche en texte intégral après la configuration de la recherche sémantique
Exécutons la même requête de texte intégral pour rechercher le mot Employé dans les documents stockés :
-- Searching (after Semantic Search setup) word Employee using Full-Text search against EmployeesDocumentStore File Table
SELECT [name]
FROM [EmployeesFilestreamSample].[dbo].[EmployeesDocumentStore]
WHERE CONTAINS(name,'Employee')
La sortie :
Il n'y a pas de problème pour que les requêtes de texte intégral fonctionnent sur la table de fichiers pendant que nous la préparons pour la recherche sémantique.
Ajouter plus de documents MS Word
Nous allons au EmployeesDocumentStore File Table et cliquez sur Explorer le répertoire FileTable :
Créez et stockez un nouveau document appelé Sadaf Contract Employee :
Ensuite, ajoutez le texte suivant au document nouvellement créé. La première ligne doit être le titre du document !
Employé contractuel de Sadaf (titre)
Sadaf est un analyste commercial très efficace qui effectue un travail basé sur les contacts. Elle est parfaitement capable de gérer les exigences commerciales et de les transformer en spécifications techniques sur lesquelles les développeurs peuvent travailler. C'est une analyste commerciale très expérimentée.
Ajoutez un autre document appelé Mike Permanent Employee :
Mettez à jour le document avec le texte suivant :
Mike Employé permanent (Titre du document)
Mike est un nouveau programmeur dont l'expertise comprend le développement Web. Il apprend vite et est heureux de travailler sur n'importe quel projet. Il a de solides compétences en résolution de problèmes, mais il a moins de connaissances en affaires. Il a besoin de l'aide d'autres développeurs ou analystes commerciaux pour comprendre le problème et répondre aux exigences.
Il est bon quand il travaille sur de petits projets mais il a du mal si on lui confie un projet important ou complexe.
Nous avons quatre documents stockés sur le système de fichiers Windows géré par File Table. Ces documents doivent être consommés par la recherche sémantique (y compris la recherche en texte intégral).
Important :Bien que nous venons de stocker quatre documents MS Word dans le dossier à titre d'exemple, vous pouvez imaginer l'importance d'utiliser la recherche sémantique lorsque des centaines de ces documents sont gérés par une base de données SQL Server et que vous devez interroger ces documents. pour trouver des informations précieuses.
La dénomination standard des documents est très importante pour la réussite de la mise en œuvre de cette approche.
Comptage simple des documents
Nous pouvons comparer ces documents et définir les différences et les similitudes en fonction de leur dénomination standard à l'aide de la recherche sémantique. Par exemple, une simple requête peut nous indiquer le nombre total de documents stockés dans le dossier Windows :
-- Getting total number of stored documents
SELECT COUNT(*) AS Total_Documents FROM EmployeesDocumentStore
Comparaison entre les employés permanents et contractuels
Cette fois, nous utilisons la recherche sémantique pour comparer le nombre d'employés permanents et contractuels dans notre organisation :
-- Creating a summary table variable
DECLARE @Documents TABLE
(DocumentType VARCHAR(100),
DocumentsCount INT)
INSERT INTO @Documents -- Storing total number of stored documents into summary table
SELECT 'Total Documents',COUNT(*) AS Total_Documents FROM EmployeesDocumentStore
INSERT INTO @Documents -- Storing total number of permanent employees documents stored into summary table
SELECT 'Total Permanent Employees',COUNT(*)
FROM semantickeyphrasetable (EmployeesDocumentStore, *)
WHERE keyphrase = 'Permanent'
INSERT INTO @Documents --Storing total number of permanent employees documents stored
SELECT 'Total Contract Employees',COUNT(*)
FROM semantickeyphrasetable (EmployeesDocumentStore, *)
WHERE keyphrase = 'Contract'
SELECT DocumentType,DocumentsCount FROM @Documents
La sortie :
Exécutons une requête de recherche sémantique simple (basée sur le nom du document) pour afficher la phrase clé et son score relatif pour chaque document :
-- Getting keyphrase and relative score for all the documents
SELECT * FROM semantickeyphrasetable(EmployeesDocumentStore, NAME)
ORDER BY score
La sortie :
Ajoutons plus de détails aux noms des documents. Nous les renommerons comme suit :
- Employé permanent d'Asif – Chef de projet expérimenté
- Mike Employé permanent – Programmeur débutant
- Peter Employé permanent – Chef de projet frais
- Employé contractuel de Sadaf – Analyste commercial expérimenté
Trouver de nouveaux employés (documents)
Trouvez les documents relatifs aux nouveaux employés en fonction de leurs titres (nommage standard) :
-- Getting document name-based scoring to find fresh employees for a new project
SELECT (SELECT name from EmployeesDocumentStore where path_locator=document_key) as DocumentName
,keyphrase,score FROM semantickeyphrasetable(EmployeesDocumentStore, NAME) where keyphrase='fresh'
order by DocumentName desc
Les résultats :
Rechercher des employés expérimentés (documents)
Supposons que nous voulions examiner rapidement tous les détails des employés expérimentés pour le projet complexe à venir. Utilisez la requête de recherche sémantique suivante :
-- Getting document name-based scoring to find all experienced employees
SELECT (SELECT name from EmployeesDocumentStore where path_locator=document_key) as DocumentName ,keyphrase,score FROM semantickeyphrasetable(EmployeesDocumentStore, NAME)
where keyphrase='experienced' order by DocumentName
La sortie :
Trouver tous les chefs de projet (Documents)
Enfin, si nous voulons parcourir rapidement les documents pour tous les chefs de projet, nous avons besoin de la requête de recherche sémantique suivante :
-- Getting document name-based scoring to find all project managers
SELECT (SELECT name from EmployeesDocumentStore where path_locator=document_key) as DocumentName ,keyphrase,score FROM semantickeyphrasetable(EmployeesDocumentStore, NAME)
where keyphrase='Project'
Les résultats :
Après avoir implémenté la procédure pas à pas, vous pouvez stocker avec succès des données non structurées, telles que des documents MS Word, dans un dossier Windows à l'aide de la table de fichiers.
Examen de l'analyse basée sur le nom
Jusqu'à présent, nous avons appris à effectuer une analyse basée sur le nom des documents stockés dans une table de fichiers à l'aide de la recherche sémantique. Cependant, nous avons besoin que les conditions suivantes soient remplies :
- Une dénomination standard doit être en place.
- Les noms doivent fournir les informations requises pour l'analyse.
Ces conditions sont également des limites de l'analyse basée sur le nom. Mais cela ne signifie pas que nous ne pouvons pas en faire grand-chose.
Nous restons concentrés sur l'approche de recherche sémantique basée sur les noms/colonnes.
Afficher les colonnes de nom des documents
Voyons quelques-unes des principales colonnes de la table Documents, y compris le Nom colonne :
USE EmployeesFilestreamSample
-- View name column with the file types of the stored documents in File Table for analysis
SELECT name,file_type
FROM dbo.EmployeesDocumentStore
La sortie :
Comprendre la fonction SEMANTICKEYPHRASETABLE
SQL Server propose le SEMANTICKEYPHRASETABLE fonction pour analyser le document avec la recherche sémantique. La syntaxe est la suivante :
SEMANTICKEYPHRASETABLE
(
table,
{ column | (column_list) | * }
[ , source_key ]
)
Cette fonction nous donne des phrases clés associées au document. Nous pouvons les utiliser pour analyser des documents en fonction de leur nom ou de leur contenu. Dans notre cas, nous devons non seulement utiliser cette fonction, mais également comprendre comment l'utiliser correctement.
La fonction nécessite les données suivantes :
- Nom de la table de fichiers à utiliser pour l'analyse de la recherche sémantique.
- Nom de la colonne à utiliser pour l'analyse de la recherche sémantique.
Ensuite, il renvoie les données suivantes :
- Column_id – le numéro de colonne
- Document_Key – la clé primaire par défaut pour le document File Table
- Phrase clé – est une phrase que Semantic Search décide d'indexer pour analyse. Cela s'applique à la fois au nom et au contenu du document en fonction de la colonne pour laquelle nous voulons voir les phrases clés
- Score – détermine la force d'une phrase clé associée à un document, par exemple comment un document est mieux reconnu par sa phrase clé. Le score peut être compris entre 0,0 et 1,0.
Analyse de tous les documents à l'aide de la fonction SEMANTICKEYPHRASETABLE
Nous utilisons le SEMANTICKEYPHRASETABLE fonction d'analyse nominative des documents stockés dans le dossier Windows géré par la Table des Fichiers.
Exécutez le script T-SQL suivant :
USE EmployeesFilestreamSample
-- View key phrases and their score for the name column
SELECT * FROM SEMANTICKEYPHRASETABLE(EmployeesDocumentStore,name)
order by score desc
La sortie :
Nous avons une liste de toutes les phrases clés attachées à tous les documents et leurs scores. Le column_id 3 dans la rangée du haut se trouve le nom colonne. De plus, nous avons également appelé la fonction en fournissant cette colonne (nom) :
Vous pouvez trouver le document_key : 0xFD89E1811D4F3B2FEB1012DF0C8016F9ACEB2F3260 exécutant le script suivant (bien qu'il soit clair que ce document est celui dont le nom contient la phrase clé sadaf ):
USE EmployeesFilestreamSample
-- Finding document name by its key (path_locator)
SELECT name,path_locator FROM dbo.EmployeesDocumentStore
WHERE path_locator=0xFD89E1811D4F3B2FEB1012DF0C8016F9ACEB2F3260
La sortie :
La phrase clé sadaf a reçu le meilleur score :1.0 .
Ainsi, dans le cas de la dénomination de document standard avec suffisamment d'informations pour l'analyse de la recherche sémantique, notre phrase clé sadaf est la meilleure correspondance pour ce nom de document particulier.
Analyse d'un document spécifique à l'aide de la fonction SEMANTICKEYPHRASETABLE
Nous pouvons affiner notre analyse de recherche sémantique en fonction du nom colonne. Par exemple, nous n'avons besoin que de voir la colonne name- phrases clés basées sur un document particulier. Nous pouvons spécifier la clé du document dans le SEMANTICKEYPHRASETABLE Fonction.
Tout d'abord, nous identifions la clé de document pour ce document où nous voulons voir toutes les phrases clés. Exécutez le script T-SQL suivant :
-- Find document_key of the document where the name contains Peter
SELECT name,path_locator as document_key From EmployeesDocumentStore
WHERE name like '%Peter%'
La clé du document est 0xFF6A92952500812FF013376870181CFA6D7C070220
Maintenant, regardons ce document concernant toutes les phrases clés qui peuvent définir le nom du document :
-- View all the key phrases and their score for a document related to Peter permanent employee
SELECT column_id,name,keyphrase,score FROM SEMANTICKEYPHRASETABLE(EmployeesDocumentStore,name,0xFF6A92952500812FF013376870181CFA6D7C070220)
INNER JOIN dbo.EmployeesDocumentStore on path_locator=document_key
order by score desc
Les résultats :
La phrase clé employé obtient le score le plus élevé dans ce document. Nous pouvons voir que tous les mots de la colonne sont des phrases clés qui déterminent le sens du document.
Comprendre la fonction SEMANTICSAMILARITYTABLE
Cette fonction nous aide à comparer un document avec tous les autres documents sur la base de phrases clés. La syntaxe de cette fonction est la suivante :
SEMANTICSIMILARITYTABLE
(
table,
{ column | (column_list) | * },
source_key
)
Il nécessite le nom de la table, la colonne et la clé de document pour correspondre à d'autres documents. Par exemple, nous pouvons affirmer que deux documents sont similaires s'ils ont un bon score de correspondance de phrases clés.
Comparer des documents à l'aide de la fonction SEMANTICSAMILARITYTABLE
Comparons un document à d'autres documents en utilisant le SEMANTICSIMILARITYTABLE Fonction.
Comparer tous les documents des chefs de projet
Nous avons besoin de voir tous les documents liés aux chefs de projet. D'après les exemples ci-dessus, nous savons que la clé de document pour le document spécifié est 0xFF6A92952500812FF013376870181CFA6D7C070220 . Par conséquent, nous pouvons utiliser cette clé pour trouver d'autres correspondances, y compris les chefs de projet :
USE EmployeesFilestreamSample
-- View all the documents closely related to Peter project manager
SELECT SST.source_column_id,SST.matched_column_id,EDS.name,SCORE FROM SEMANTICSIMILARITYTABLE(EmployeesDocumentStore,name,0xFF6A92952500812FF013376870181CFA6D7C070220) SST
INNER JOIN dbo.EmployeesDocumentStore EDS on EDS.path_locator=SST.matched_document_key
order by score desc
La sortie :
Le document le plus étroitement lié est Asif Permanent Employee – Experienced Project Manager.docx
Comparaison des documents d'analystes commerciaux expérimentés
Maintenant, nous allons comparer les documents liés à analyste commercial expérimenté s et trouvez la correspondance la plus proche à l'aide de la recherche sémantique. Nous sommes limités à l'analyse basée sur le nom du document :
USE EmployeesFilestreamSample
-- Finding document_key for experienced business analyst
select name,path_locator as document_key from EmployeesDocumentStore
where name like '%experienced business analyst%'
-- View all the documents closely related to experienced business analyst
SELECT SST.source_column_id,SST.matched_column_id,EDS.name,SCORE FROM SEMANTICSIMILARITYTABLE(EmployeesDocumentStore,name,0xFD89E1811D4F3B2FEB1012DF0C8016F9ACEB2F3260) SST
INNER JOIN dbo.EmployeesDocumentStore EDS on EDS.path_locator=SST.matched_document_key
order by score desc
La sortie :
Comme nous pouvons le voir à partir des résultats ci-dessus, la correspondance la plus proche pour le document lié à l'analyste commercial expérimenté est le document du chef de projet expérimenté parce qu'ils sont tous les deux expérimentés . Néanmoins, le score de 0,3 indique qu'il n'y a pas grand-chose en commun entre ces deux documents.
Conclusion
Toutes nos félicitations! Nous avons appris avec succès à stocker des documents dans des dossiers Windows et à les analyser à l'aide de la recherche sémantique. Nous avons également exploré les fonctions à utiliser dans la pratique. Vous pouvez maintenant appliquer les nouvelles connaissances et essayer les exercices suivants pour
Restez à l'écoute pour d'autres matériaux !