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 artisanat. Il combine toutes les choses que vous avez approuvées 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 à essayer une base de données différente. La recherche en texte complet est parmi les plus récentes fonctionnalités non-SQL incorporées dans PostgreSQL. La recherche de texte complète de PostgreSQL est-elle complètement fonctionnelle, ou voudriez-vous un index de recherche distinct? Si vous pouvez en quelque sorte développer une recherche de texte complète privée d'ajouter une couverture de code de plus, ce serait une idée fantastique. Vous connaissez déjà la recherche de motifs 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 autre que les options par défaut. Si vous avez besoin de slog avec des considérations par défaut, laissez tous les choix vides et appuyez sur chaque option. Pour le moment, votre shell de ligne de commande est équipé pour fonctionner.

Pour comprendre le concept de recherche en texte intégral, vous devez vous souvenir des connaissances de recherche de motifs via le mot-clé similaire. Alors, supposons un tableau «personne» dans la base de données «test» avec les enregistrements suivants.

>> sélectionner * parmi la personne;

Supposons que vous souhaitiez récupérer les enregistrements de ce tableau, où la colonne «nom» a un personnage «i» dans l'une de ses valeurs. Essayez la requête Sélectionnez ci-dessous tout en utilisant la clause similaire dans la commande de commandement. De la sortie ci-dessous, vous pouvez voir que nous n'avons que 5 enregistrements pour ce caractère particulier 'I' dans la colonne 'nom' '.

>> Sélectionner * parmi la personne où le nom comme «% i%»;

Utilisation de TVSector:

Parfois, il n'est pas utile d'utiliser le mot-clé similaire pour effectuer une recherche de motifs rapide, bien que le mot soit là. Peut-être que vous envisageriez d'utiliser des expressions standard, et bien qu'il s'agisse d'une alternative réalisable, 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 complète 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:

  • To_tvsector: Utilisé pour faire une liste de jetons (TS signifie «recherche de texte»).
  • To_tsquery: Utilisé pour rechercher au vecteur des incidences de termes ou de phrases spécifiques.

Exemple 01:

Commençons par une simple illustration de la création d'un vecteur. Supposons que vous vouliez faire un vecteur pour la chaîne: «Certaines personnes ont des cheveux bruns bouclés à travers un brossage approprié.". Vous devez donc écrire une fonction TO_TVSECTOR () avec cette phrase dans les crochets d'une requête sélectionnée comme annexé ci-dessous. D'après la sortie ci-dessous, vous pouvez voir qu'il donnerait un vecteur de références (positions de fichier) pour chaque jeton, ainsi.

>> Sélectionnez To_tsvector («Certaines personnes ont des poils bruns bouclés grâce à un brossage approprié»);

Exemple 02:

Supposons que vous avez deux documents avec certaines données dans les deux. Pour stocker ces données, nous utiliserons maintenant un véritable exemple de génération de jetons. Supposons que vous ayez créé un tableau des «données» dans votre «test» de base de données avec certaines colonnes en utilisant la requête de table ci-dessous. N'oubliez pas de créer une colonne de type TVSector nommé «Token» dedans. À partir de la sortie ci-dessous, vous pouvez jeter un œil à la table qui a été créée.

>> Créer des données de table (id série primaire série, texte d'information, token tsvector);

Maintenant, il nous tourne pour ajouter les données globales des deux documents de ce tableau. Alors essayez 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 faire un bon.'), (' C'est lui qui peut jouer au football.'), (' Puis-je jouer un rôle dans ce?«), (« La douleur à l'intérieur de l'une ne peut être comprise ») (« Apportez la pêche dans votre vie);

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

>> Mettre à jour les données f1 token = to_tsvector (F1.info) à partir des données f2;

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

>> Sélectionnez ID, informations sur les données où jeton @@ à_tsQuery ('Can & One');

Exemple 04:

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

>> Sélectionnez ID, informations sur les données où jeton @@ à_tsQuery ('peut un');

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

>> Sélectionnez ID, informations sur les données où jeton @@ à_tsQuery («une douleur»);

Exemple 05:

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

>> sélectionnez * dans les données où jeton @@ à_tsQuery («apporter vie»);

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

>> Sélectionner * dans les données où token @@ to_tsquery («mauvais bien»);

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.