2010-08-17 3 views
0

J'utilise la recherche en texte intégral pris en charge par Postgres, j'ai installé le plugin acts_as_tsearch et il fonctionne avec succès, mais quand je l'ai essayé plus tard, je trouve une erreurfonction ts_rank_cd (texte, tsquery) n'existe pas

runtimeError: ERROR C42883 Mfunction ts_rank_cd(text, tsquery) does not exist HNo function matches the given name and argument types. You might need to add explicit type

Répondre

0

EDIT

ts_rank_cd(text, tsquery) does not exist

Cela signifie qu'il n'y a pas de fonction avec ce nom qui accepte le texte et un paramètre tsquery en entrée. Et c'est vrai, PostgreSQL n'a pas de fonction utilisant ces paramètres.

De the manual:

ts_rank_cd([ weights float4[], ] vector tsvector, query tsquery [, normalization integer ])

Changer votre entrée pour la fonction ts_rank_cd() et vous serez bien.

4

Vous devez jeter votre premier paramètre dans un tsvector.

Alors supposons que vous êtes à la recherche contre une colonne nommée foo.text. Vous voulez changer de ceci:

SELECT ts_rank_cd(foo.text, plainto_tsquery('my search terms')) FROM foo; 

à ceci:

SELECT ts_rank_cd(to_tsvector(foo.text), plainto_tsquery('my search terms')) FROM foo; 

ou quelque chose de similaire.

Si vous utilisez l'opérateur @@ ailleurs, vous pouvez généralement réutiliser les expressions que l'opérateur fonctionne sur. Vous pouvez trouver plus de documentation sur to_tsvector à http://www.postgresql.org/docs/current/static/textsearch-controls.html#TEXTSEARCH-PARSING-DOCUMENTS