mateusgra escreveu:
> Gostaria de saber se o Tsearch tem como localizar um texto que comece com
> uma determinada palavra com se fosse o like 'POSTGRESQL 8.2%'.
> 
Você _não_ entendeu o conceito de busca textual [1] (aka text _search_);
quando se transforma um texto no tipo tsvector, este "perde" posicionamento e
"ganha" peso (relevância) e proximidade. Assim, sem posicionamento é
impossível fazer uma comparação com prefixo do texto. O uso do :* nos deixa
comparar com o prefixo de *cada* lexema.

O que você precisa é de expressões regulares [2]. Veja:

euler=# create table bar (a text);
CREATE TABLE
euler=# insert into bar select 'euler taveira de oliveira' from
generate_series(1, 10);
INSERT 0 10
euler=# insert into bar select 'jorge vilela' from generate_series(1, 5000);
INSERT 0 5000
euler=# create index bari on bar (a text_pattern_ops);
CREATE INDEX
euler=# select * from bar where a ~ '^euler';
             a
---------------------------
 euler taveira de oliveira
 euler taveira de oliveira
 euler taveira de oliveira
 euler taveira de oliveira
 euler taveira de oliveira
 euler taveira de oliveira
 euler taveira de oliveira
 euler taveira de oliveira
 euler taveira de oliveira
 euler taveira de oliveira
(10 rows)

euler=# explain analyze select * from bar where a ~ '^euler';
                                                     QUERY PLAN

---------------------------------------------------------------------------------------------------------------------
 Bitmap Heap Scan on bar  (cost=4.35..25.17 rows=10 width=13) (actual
time=0.101..0.224 rows=10.00 loops=1.00)
   Filter: (a ~ '^euler'::text)
   ->  Bitmap Index Scan on bari  (cost=0.00..4.35 rows=10 width=0) (actual
time=0.055..0.055 rows=10.00 loops=1.00)
         Index Cond: ((a ~>=~ 'euler'::text) AND (a ~<~ 'eules'::text))
 Total runtime: 0.334 ms
(5 rows)


[1] http://www.postgresql.org/docs/8.4/static/textsearch.html
[2]
http://www.postgresql.org/docs/8.4/static/functions-matching.html#FUNCTIONS-POSIX-REGEXP


-- 
  Euler Taveira de Oliveira
  http://www.timbira.com/
_______________________________________________
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Responder a