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

#1 03/06/2009 22:39:55

ael
Membre

Problème de recherche full text

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 ?

Hors ligne

#2 03/06/2009 23:47:46

gleu
Administrateur

Re : Problème de recherche full text

J'ai fait exactement ce que vous décrivez et j'obtiens la même réponse pour les deux dernières requêtes, à savoir la ligne insérée apparaît dans les deux cas. Et si j'insère une ligne ne contenant pas title (ni titl), j'obtiens bien qu'une seule ligne pour les deux requêtes.

Essayez de nouveau, ça doit fonctionner.


Guillaume.

Hors ligne

#3 04/06/2009 00:00:18

ael
Membre

Re : Problème de recherche full text

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.

Hors ligne

Pied de page des forums