PostgreSQL La base de donnees la plus sophistiquee au monde.

Forums PostgreSQL.fr

Le forum officiel de la communauté francophone de PostgreSQL

Vous n'êtes pas identifié(e).

#1 Re : Général » Problème de recherche full text » 04/06/2009 00:00:18

ael

Merci de confirmer que je ne suis pas fou et que la requête devrait fonctionner. Après d'autres tests, il semblerait que le problème ne se produise qu'avec mon serveur de test installé sur un OS Windows.

#2 Général » Problème de recherche full text » 03/06/2009 22:39:55

ael
Réponses : 2

Bonsoir,

J'essaye de comprendre le fonctionnement de PostgreSQL (8.3.7) pour la recherche full text, et comment l'adapter à ce que je souhaite.

Voila mon test :

Une table :

CREATE TABLE fragment (
    fragment_id BIGSERIAL NOT NULL,
    fragment_title VARCHAR(2048),
    fragment_data TEXT,
    fragment_search tsvector,
    PRIMARY KEY(fragment_id)
);
CREATE INDEX "fragment_txtsearch" ON fragment USING gin(fragment_search);

Un trigger pour les mises à jour :

CREATE TRIGGER tsvectorupdate BEFORE INSERT OR UPDATE ON fragment FOR EACH ROW EXECUTE PROCEDURE
tsvector_update_trigger(fragment_search, 'pg_catalog.english', fragment_title, fragment_data);

Un enregistrement de test :

INSERT INTO fragment VALUES (1, 'Title test', 'First title test');

Après l'insertion le champ fragment_search est rempli avec des valeurs qui semblent cohérentes :

"'test':2,5 'titl':1,4 'first':3"

Si je recherche un des élément directement j'ai bien ma réponse (exemple avec titl) :

SELECT * FROM fragment, to_tsquery('titl') query WHERE query @@ fragment_search;

En revanche si je cherche title je n'ai pas de réponse :

SELECT * FROM fragment, to_tsquery('title') query WHERE query @@ fragment_search;

Est-ce un fonctionnement normal ? Si oui comment puis-je créer mon trigger pour qu'il ne stocke *QUE* les éléments du contenu sans chercher à les sous diviser en lexêmes ?

Pied de page des forums

Propulsé par FluxBB