Disons que vous avez un postgres 8.3 tableau comme suit:Comment faire une recherche textuelle textuelle dans Postgres qui tire parti de l'index de recherche en texte intégral?
CREATE TABLE t1 (body text, body_vector tsvector);
Je veux être en mesure d'y rechercher des phrases en utilisant l'index en texte intégral (GIST, GIN, ou les deux sur la colonne tsvector). La meilleure solution de contournement que j'ai pu trouver est de faire d'abord la recherche en texte intégral sur les deux mots (booléen ET) et de faire une comparaison similaire sur le corps pour la phrase. Bien sûr, cela ne parvient pas à capturer toute vérification de la racine ou de l'orthographe que la recherche en texte intégral de postgres fait pour vous. Un exemple de ceci est si je suis à la recherche de l'expression « w1 w2 », j'utiliser:
SELECT * FROM t1 WHERE body_vector @@ 'w1 & w2'::tsquery AND body LIKE 'w1 w2';
Est-il possible de le faire où vous n'avez pas à recourir à la recherche sur la colonne de texte?
Peut-être que je n'ai pas attrapé quelque chose, mais cela ne nécessite-t-il pas la chaîne d'entrée pour contenir la phrase recherchée entre guillemets simples? Comment pourrait-on l'utiliser en général, quand la phrase vient d'une entrée d'utilisateur, et le document provient d'une colonne de base de données? –
Ce n'est toujours pas "recherche de phrase". Cela ne fonctionne que depuis votre phrase tsvector 'New York' est enveloppé dans des guillemets simples. – soyayix
Oui les deux fonctions le font - mais votre chaîne tsvector dans la plupart des cas n'aura pas de guillemets simples - si c'est le cas alors quelle est la phrase de recherche pour .. J'ai un postgreSQL 9.4 et la requête que vous avez fonctionne - ce n'est pas seulement spécifique à 9.6. choisir 'je coeur new york city' :: tsvector @@ 'nouveau' :: tsquery, --true 'je coeur new york city' :: tsvector @@ 'new & york' :: tsquery, - true 'je coeur new york city' :: tsvector @@ '' 'new york' '' :: tsquery --false – soyayix