PostgreSQL

Exemples de recherche en texte intégral PostgreSQL

Exemples de recherche en texte intégral PostgreSQL
Toute base de données doit avoir une capacité de recherche efficace et polyvalente. Chaque fois qu'il fait référence aux bases de données, PostgreSQL est un maître de tous les métiers. Il combine tout ce que vous avez appris à aimer avec SQL avec une multitude de fonctionnalités de base de données non SQL. Toutes ces fonctions non-SQL, telles que le tri des informations JSONB, sont fantastiques et vous n'auriez même pas besoin d'essayer une autre base de données. La recherche en texte intégral fait partie des dernières fonctionnalités non-SQL intégrées à PostgreSQL. La recherche de texte complet de PostgreSQL est-elle complètement fonctionnelle, ou voudriez-vous un index de recherche distinct? Si vous pouvez développer une recherche de texte complète sans ajouter une couverture de code supplémentaire, ce serait une idée fantastique. Vous êtes déjà familiarisé avec la recherche de modèles dans la base de données MySQL. Alors, regardons-les d'abord. Ouvrez le shell de ligne de commande PostgreSQL dans votre système informatique. Écrivez le titre du serveur, le nom de la base de données, le numéro de port, le nom d'utilisateur et le mot de passe pour l'utilisateur spécifique autres que les options par défaut. Si vous devez travailler avec des considérations par défaut, laissez tous les choix vides et appuyez sur Entrer chaque option. Pour le moment, votre shell de ligne de commande est équipé pour travailler sur.

Pour comprendre le concept de recherche en texte intégral, vous devez vous souvenir des connaissances sur la recherche de modèles via le mot-clé LIKE. Supposons donc une table 'person' dans la base de données 'test' contenant les enregistrements suivants.

>> SÉLECTIONNER * DE LA personne ;

Supposons que vous vouliez récupérer les enregistrements de cette table, où la colonne 'nom' a un caractère 'i' dans l'une de ses valeurs. Essayez la requête SELECT ci-dessous en utilisant la clause LIKE dans le shell de commande. D'après la sortie ci-dessous, vous pouvez voir que nous n'avons que 5 enregistrements pour ce caractère particulier 'i' dans la colonne 'nom'.

>> SELECT * FROM personne WHERE nom LIKE '%i%';

Utilisation de TVsector :

Parfois, il est inutile d'utiliser le mot-clé LIKE pour faire une recherche rapide de modèle, bien que le mot soit là. Peut-être envisageriez-vous d'utiliser des expressions standard, et bien qu'il s'agisse d'une alternative faisable, les expressions régulières sont à la fois fortes et lentes. Avoir un vecteur procédural pour des mots entiers dans un texte, une description vernaculaire de ces mots, est un moyen beaucoup plus efficace de résoudre ce problème. Le concept de recherche de texte complet et le type de données tsvector a été créé pour y répondre. Il existe deux méthodes dans PostgreSQL qui font exactement ce que nous voulons :

Exemple 01 :

Commençons par une illustration simple de la création d'un vecteur. Supposons que vous vouliez créer un vecteur pour la chaîne : « Certaines personnes ont les cheveux bruns bouclés grâce à un brossage approprié.". Vous devez donc écrire une fonction to_tvsector() avec cette phrase entre parenthèses d'une requête SELECT comme annexé ci-dessous. À partir de la sortie ci-dessous, vous pouvez voir que cela produirait un vecteur de références (positions de fichiers) pour chaque jeton, et également où les termes avec peu de contexte, comme les articles (le) et les conjonctions (et, ou), sont délibérément ignorés.

>> SELECT to_tsvector('Certaines personnes ont les cheveux bruns bouclés grâce à un brossage approprié');

Exemple 02 :

Supposons que vous ayez deux documents avec des données dans les deux. Pour stocker ces données, nous allons maintenant utiliser un exemple réel de génération de jetons. Supposons que vous ayez créé une table 'Data' dans votre base de données 'test' avec quelques colonnes à l'aide de la requête CREATE TABLE ci-dessous. N'oubliez pas de créer une colonne de type TVSECTOR nommée 'token' dedans. À partir de la sortie ci-dessous, vous pouvez consulter le tableau qui a été créé.

>> CREATE TABLE Data (Id SERIAL PRIMARY KEY, info TEXT, token TSVECTOR);

Maintenant, il s'agit pour nous d'ajouter les données globales des deux documents dans ce tableau. Essayez donc la commande INSERT ci-dessous dans votre shell de ligne de commande pour le faire. Enfin, les enregistrements des deux documents ont été ajoutés avec succès dans le tableau « Données ».

>> INSÉRER DANS LES VALEURS de données (info) ('Deux torts ne peuvent jamais en réparer un.'), ('C'est lui qui sait jouer au foot.'), ('Puis-je jouer un rôle dans ce?'), ('La douleur à l'intérieur de l'un ne peut pas être comprise'), ('Apportez la pêche dans votre vie);

Vous devez maintenant coloniser la colonne token des deux documents avec leur vecteur spécifique. En fin de compte, une simple requête UPDATE remplira la colonne des jetons par leur vecteur correspondant pour chaque fichier. Donc, vous devez exécuter la requête ci-dessous dans le shell de commande pour le faire. La sortie montre que la mise à jour a finalement été effectuée.

>> MISE À JOUR Données f1 SET jeton = to_tsvector(f1.info) À PARTIR des données f2 ;

Maintenant que tout est en place, revenons à notre illustration de « can one » avec un scan. To_tsquery avec l'opérateur AND, comme indiqué précédemment, ne fait aucune différence entre les emplacements des fichiers dans les fichiers, comme indiqué dans la sortie indiquée ci-dessous.

>> SELECT Id, info FROM Data WHERE jeton @@ to_tsquery('can & one');

Exemple 04 :

Pour trouver des mots « à côté » les uns des autres, nous allons essayer la même requête avec le '<->'opérateur. Le changement est affiché dans la sortie ci-dessous.

>> SELECT Id, info FROM Data WHERE jeton @@ to_tsquery('can <-> une');

Voici un exemple d'aucun mot immédiat à côté d'un autre.

>> SELECT Id, info FROM Data WHERE token @@ to_tsquery('one <-> la douleur');

Exemple 05 :

Nous trouverons les mots qui ne sont pas immédiatement côte à côte en utilisant un nombre dans l'opérateur de distance pour référencer la distance. La proximité entre « apporter » et « la vie est de 4 mots en dehors de l'image affichée.

>> SELECT * FROM Data WHERE jeton @@ to_tsquery('bring <4> vie');

Pour vérifier la proximité entre les mots pour près de 5 mots est annexé ci-dessous.

>> SELECT * FROM Data WHERE jeton @@ to_tsquery('wrong <5> droite');

Conclusion:

Enfin, vous avez fait tous les exemples simples et compliqués de recherche en texte intégral en utilisant les opérateurs et fonctions To_tvsector et to_tsquery.

Comment modifier les paramètres de la souris et du pavé tactile à l'aide de Xinput sous Linux
La plupart des distributions Linux sont livrées avec la bibliothèque "libinput" par défaut pour gérer les événements d'entrée sur un système. Il peut ...
Remappez les boutons de votre souris différemment pour différents logiciels avec X-Mouse Button Control
Peut-être que vous avez besoin d'un outil qui pourrait faire changer le contrôle de votre souris avec chaque application que vous utilisez. Si tel est...
Examen de la souris sans fil Microsoft Sculpt Touch
J'ai lu récemment sur le Microsoft Sculpt Touch souris sans fil et j'ai décidé de l'acheter. Après l'avoir utilisé pendant un certain temps, j'ai déci...