7
votes

Comment puis-je requête SQL pour les mots avec la ponctuation à PostgreSQL?

Si j'ai des chaînes / expressions telles que celles-ci stockées dans la base de données:

  • Quelles sont les opérations de type Q?
  • Guide du programmeur
  • a.b.ca de codage

    Y a-t-il un moyen de transmettre un paramètre de requête dans "Programmeurs" " ABC " ou " Type Q / code> et ont Il trouve "'s" "'s" , "ABC" et "type q type" ?


0 commentaires

6 Réponses :



0
votes

Cela ressemble à vous voulez quelque chose qui le long de ces lignes:

http: / /www.postgresql.org/docs/9.0/static/fuzzystrmatch.html p>

Je ne suis pas sûr à 100% si cela couvrira ce que vous voulez. P>

edit strud> Je devais exécuter cela localement pour vérifier (en utilisant PostgreSQL 9.0 sous Windows) P>

Voici ce que j'ai trouvé: p>

template1=> select soundex('Programmers'), soundex('Programmer''s');
 soundex | soundex
---------+---------
 P626    | P626
(1 row)


template1=> select soundex('abc'), soundex('A.B.C.');
 soundex | soundex
---------+---------
 A120    | A120
(1 row)


template1=> select soundex('Q-type'), soundex('q-type');
 soundex | soundex
---------+---------
 Q310    | Q310
(1 row)


0 commentaires

1
votes

Voici un autre lien qui peut être pertinent. Detissez la valeur du champ à partir de toute la ponctuation avant de la comparer à la chaîne de recherche.

SQL Server: Comment supprimez-vous la ponctuation de Un champ?


0 commentaires

0
votes

postgres prend en charge la correspondance des motifs afin que vous puissiez créer une expression régulière dans votre clause où http://www.postgresql.org/docs/8.3/static/functions -Matching.html


0 commentaires

6
votes

TSVector

Utilisez le type code> TSVector code>, qui fait partie de la fonction de recherche texte postgreSQL. p> xxx pré>

Vous pouvez utiliser des opérateurs familiers Sur les tsvectors aussi: p> xxx pré>

de Tsvector Documentation: P>

Une valeur TSVector est une liste triée de lexemes distincts, qui sont des mots normalisés pour fusionner différentes variantes du même mot (voir chapitre 12 pour plus de détails). Le tri et la duplication-élimination sont effectués automatiquement pendant l'entrée p> blockQuote>

Si vous souhaitez également faire une normalisation spécifique à la langue, comme supprimant les mots communs («le ',' A ', etc.) et multiplie, utilisez la fonction to_tsvector code>. Il attribue également des poids à différents mots pour la recherche de texte: p> xxx pré>

la recherche de texte plein soufflé h2>

fais évidemment cela pour chaque rangée d'une requête sera chère - Vous devez donc stocker le TSVector dans une colonne séparée et utiliser TS_Query () pour la recherche. Cela vous permet également de créer un indice de gist sur le TSVector. P>

postgres> select phrase from text where tsvec @@ to_tsquery('q-type');
           phrase            
-----------------------------
 What are Q-type Operations?
(1 row)


0 commentaires

0
votes

postgreSQL prend en charge la recherche de texte intégral en convertissant une entrée de texte en TSVector Types: xxx

Comme vous pouvez le constater, la tige utilisée par défaut fera "la programmation" "programmeur" et "de programmeur" tous correspondent de manière identique.

Vous l'utiliseriez généralement en ayant une colonne ou une expression de Tsvector indexée, puis utilisez l'opérateur @@ . a tsquery , par exemple: xxx

ici plainto_tsquerie analyse une chaîne d'entrée utilisateur et produit une requête où chaque non- Arrêter le mot dans la requête doit être jumelé par un TSVector.


0 commentaires