Quantcast

TSearch palavar Inicial

classic Classic list List threaded Threaded
23 messages Options
12
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

TSearch palavar Inicial

Mateus Gra
Bom dia,

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%'.

Porque se eu uso idxfts @@ to_tsquery('POSTGRESQL&8.2') retorna tb resultados como:
  POSTGRESQL 8.2 TUTORIAL
  SQL POSTGRESQL 8.2
  INDICES POSTGRESQL 8.2
  POSTGRESQL 8.2 SLONY

Eu gostaria que retorna-se:
   POSTGRESQL 8.2 TUTORIAL
   POSTGRESQL 8.2 SLONY

Uso o postgresql 8.2.7.
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

Re: TSearch palavar Inicial

jorge vilela
Mateus, essa funcionalidade foi adicionada na versão 8.4

O Euler deu o seguinte exemplo de utilização:

euler=# create table foo (a tsvector);
CREATE TABLE
euler=# insert into foo select 'euler taveira de oliveira'::tsvector from
generate_series(1, 1000);
INSERT 0 1000
euler=# insert into foo select 'jorge vilela'::tsvector from
generate_series(1, 100);
INSERT 0 100
euler=# create index fooi on foo using gin (a);
CREATE INDEX
euler=# select * from foo where a @@ 'vile:*' limit 5;
       a
------------------
 'jorge' 'vilela'
 'jorge' 'vilela'
 'jorge' 'vilela'
 'jorge' 'vilela'
 'jorge' 'vilela'
(5 registros)
euler=# explain analyze select * from foo where a @@ 'vile:*';


Aqui eu já estou utilizando a versão 8.4 (Justamente por esse motivo), porém, ainda tenho algumas dúvidas sobre o TSearch. Por exemplo:

O Euler apresentou o ":*" como coringa para término ou começo de string, mas eu não consigo utilizá-lo em ambos os casos. Veja:

select descricao from tag where to_tsvector(descricao) @@ to_tsquery('MONIT:*');
- monitor
- para monitor lcd

Porém:

select descricao from tag where to_tsvector(descricao) @@ to_tsquery('*TOR');
Não retorna nada

'*:TOR' retorna erro de sintaxe...

Alguém sabe dizer se é isso mesmo, se ele só possui implementação para o fim dos termos de busca ou eu estou fazendo errado?


Jorge

2009/6/15 mateusgra <[hidden email]>

Bom dia,

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%'.

Porque se eu uso idxfts @@ to_tsquery('POSTGRESQL&8.2') retorna tb
resultados como:
 POSTGRESQL 8.2 TUTORIAL
 SQL POSTGRESQL 8.2
 INDICES POSTGRESQL 8.2
 POSTGRESQL 8.2 SLONY

Eu gostaria que retorna-se:
  POSTGRESQL 8.2 TUTORIAL
  POSTGRESQL 8.2 SLONY

Uso o postgresql 8.2.7.
--
View this message in context: http://www.nabble.com/TSearch-palavar-Inicial-tp24035502p24035502.html
Sent from the PostgreSQL - Brasil mailing list archive at Nabble.com.

_______________________________________________
pgbr-geral mailing list
[hidden email]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


_______________________________________________
pgbr-geral mailing list
[hidden email]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

Re: TSearch palavra Inicial

Mateus Gra
E o 8.2 não tem nada parecido com isso.

jorge vilela wrote
Mateus, essa funcionalidade foi adicionada na versão 8.4
O Euler deu o seguinte exemplo de utilização:

euler=# create table foo (a tsvector);
CREATE TABLE
euler=# insert into foo select 'euler taveira de oliveira'::tsvector from
generate_series(1, 1000);
INSERT 0 1000
euler=# insert into foo select 'jorge vilela'::tsvector from
generate_series(1, 100);
INSERT 0 100
euler=# create index fooi on foo using gin (a);
CREATE INDEX
euler=# select * from foo where a @@ 'vile:*' limit 5;
       a
------------------
 'jorge' 'vilela'
 'jorge' 'vilela'
 'jorge' 'vilela'
 'jorge' 'vilela'
 'jorge' 'vilela'
(5 registros)
euler=# explain analyze select * from foo where a @@ 'vile:*';


Aqui eu já estou utilizando a versão 8.4 (Justamente por esse motivo),
porém, ainda tenho algumas dúvidas sobre o TSearch. Por exemplo:

O Euler apresentou o ":*" como coringa para término ou começo de string, mas
eu não consigo utilizá-lo em ambos os casos. Veja:

select descricao from tag where to_tsvector(descricao) @@
to_tsquery('MONIT:*');
- monitor
- para monitor lcd

Porém:

select descricao from tag where to_tsvector(descricao) @@
to_tsquery('*TOR');
Não retorna nada

'*:TOR' retorna erro de sintaxe...

Alguém sabe dizer se é isso mesmo, se ele só possui implementação para o fim
dos termos de busca ou eu estou fazendo errado?


Jorge

2009/6/15 mateusgra <mateusgra@bol.com.br>

>
> Bom dia,
>
> 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%'.
>
> Porque se eu uso idxfts @@ to_tsquery('POSTGRESQL&8.2') retorna tb
> resultados como:
>  POSTGRESQL 8.2 TUTORIAL
>  SQL POSTGRESQL 8.2
>  INDICES POSTGRESQL 8.2
>  POSTGRESQL 8.2 SLONY
>
> Eu gostaria que retorna-se:
>   POSTGRESQL 8.2 TUTORIAL
>   POSTGRESQL 8.2 SLONY
>
> Uso o postgresql 8.2.7.
> --
> View this message in context:
> http://www.nabble.com/TSearch-palavar-Inicial-tp24035502p24035502.html
> Sent from the PostgreSQL - Brasil mailing list archive at Nabble.com.
>
> _______________________________________________
> pgbr-geral mailing list
> pgbr-geral@listas.postgresql.org.br
> https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
>

_______________________________________________
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

postgresql 8.4

Leandro Muller
Ola turma.

Alguém leu algum artigo sobre desempenho na versão 8.4, das novidades, teste
comparativos com a versão 8.3?

Abraços.

At.

Leandro Müller
Analista de Sistemas





_______________________________________________
pgbr-geral mailing list
[hidden email]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

Re: TSearch palavar Inicial

Euler Taveira de Oliveira
In reply to this post by Mateus Gra
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
[hidden email]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

Re: TSearch palavar Inicial

Euler Taveira de Oliveira
In reply to this post by jorge vilela
Jorge Vilela escreveu:
> Aqui eu já estou utilizando a versão 8.4 (Justamente por esse motivo),
Eu *não* aconselharia utilizar a 8.4 ainda. Podem vir a aparecer bugs que
precisam mudar o formato dos arquivos de dados (é claro que essa possibilidade
é baixa já que estamos lançando a RC1 mas...).

> O Euler apresentou o ":*" como coringa para término ou começo de string,
> mas eu não consigo utilizá-lo em ambos os casos. Veja:
>
Você *não* entendeu o que o :* faz [1]. O curinga :* permite fazer uma busca
pelo prefixo mas *não* pelo sufixo (ainda). Afinal de contas, quem vai
pesquisar no Google por 'tor' para obter 'monitor'?


[1]
http://www.postgresql.org/docs/8.4/static/datatype-textsearch.html#DATATYPE-TSQUERY


--
  Euler Taveira de Oliveira
  http://www.timbira.com/
_______________________________________________
pgbr-geral mailing list
[hidden email]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

Re: postgresql 8.4

Euler Taveira de Oliveira
In reply to this post by Leandro Muller
Leandro Müller escreveu:

[Pare de "sequestrar" os assuntos; se é um assunto _novo_ *não* clique em
responder e apague o conteúdo da mensagem, ao invés disse crie uma mensagem
nova. Isso _bagunça_ o histórico da lista.]

> Alguém leu algum artigo sobre desempenho na versão 8.4, das novidades, teste
> comparativos com a versão 8.3?
>
O único teste que vi sobre o desempenho do 8.4 foram [1][2]. Quanto as
novidades, temos a palestra [3] do Robert no PGCon e a da Fernando Ike [4]
(que acontecerá daqui 2 semanas no FISL). Temos uma matriz [5] que mostra a
evolução das funcionalidades no PostgreSQL comparado com as versões anteriores.

[1]
http://www.kaltenbrunner.cc/blog/index.php?/archives/26-Benchmarking-8.4-Chapter-1Read-Only-workloads.html
[2] http://www.pgcon.org/2009/schedule/events/124.en.html
[3] http://www.pgcon.org/2009/schedule/events/179.en.html
[4] http://fisl.softwarelivre.org/10/papers/pub/
[5] http://www.postgresql.org/about/featurematrix


--
  Euler Taveira de Oliveira
  http://www.timbira.com/
_______________________________________________
pgbr-geral mailing list
[hidden email]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

Re: TSearch palavar Inicial

Mateus Gra
In reply to this post by Euler Taveira de Oliveira

E se eu quiser pesquisar que comece com Euler e termine com oliveira.
Indice com _pattern_ops so aceita pesquisa no inicio do campo.
E indice gist não aceita indice composto.

Não consegui resolver esse problema ?

Se puder dar um ideia.


Euler Taveira de Oliveira-2 wrote:

>
> 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
> [hidden email]
> https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
>
>

--
View this message in context: http://www.nabble.com/TSearch-palavar-Inicial-tp24035502p24042073.html
Sent from the PostgreSQL - Brasil mailing list archive at Nabble.com.

_______________________________________________
pgbr-geral mailing list
[hidden email]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

Re: TSearch palavar Inicial

jorge vilela
In reply to this post by Euler Taveira de Oliveira
Até agora está bem estável o 8.4... Muito bons os links sugeridos pelo Euler, vou dar uma estudada.

Obrigado


2009/6/15 mateusgra <[hidden email]>



Euler Taveira de Oliveira-2 wrote:
>
> 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
> [hidden email]
> https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
>
>

--
View this message in context: http://www.nabble.com/TSearch-palavar-Inicial-tp24035502p24042078.html
Sent from the PostgreSQL - Brasil mailing list archive at Nabble.com.

_______________________________________________
pgbr-geral mailing list
[hidden email]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


_______________________________________________
pgbr-geral mailing list
[hidden email]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

Re: TSearch palavar Inicial

Mateus Gra
In reply to this post by Euler Taveira de Oliveira

E se eu quiser pesquisar que comece com Euler e termine com oliveira.
Indice com _pattern_ops so aceita pesquisa no inicio do campo.
E indice gist não aceita indice composto.

Não consegui resolver esse problema ?

Se puder dar um ideia.


Euler Taveira de Oliveira-2 wrote:

>
> 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
> [hidden email]
> https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
>
>

--
View this message in context: http://www.nabble.com/TSearch-palavar-Inicial-tp24035502p24042097.html
Sent from the PostgreSQL - Brasil mailing list archive at Nabble.com.

_______________________________________________
pgbr-geral mailing list
[hidden email]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

Re: TSearch palavar Inicial

Euler Taveira de Oliveira
In reply to this post by Euler Taveira de Oliveira
mateusgra escreveu:
> E se eu quiser pesquisar que comece com Euler e termine com oliveira.
> Indice com _pattern_ops so aceita pesquisa no inicio do campo.
A documentação é o seu melhor amigo. Você testou o que mandei? É claro que ele
usa o índice; só não vai utilizar se você fizer uma pesquisa com sufixo.

euler=# select * from bar where a ~ '^euler.*oliveira';
             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.*oliveira';
                                                     QUERY PLAN

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

> E indice gist não aceita indice composto.
>
Quem falou em índice GiST? É um B-Tree mesmo.

> Não consegui resolver esse problema ?
>
Faltou ler as referências que enviei. :( Se você não conhece o poder das
funcionalidades do PostgreSQL fica difícil você saber se algo se encaixa na
sua solução.


--
  Euler Taveira de Oliveira
  http://www.timbira.com/
_______________________________________________
pgbr-geral mailing list
[hidden email]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

Re: TSearch palavar Inicial

Mateus Gra
O que vc disse esta correto. So que agora estou com outro problema esta muito lento.
A tabela tem 200 Milhoes de registros desses 200 tem 50 milhoes com descrição parecida para cada 1 registro pode ter 70 mil registros que podem ser retornados mesmo com limit 10 esta muito lento para determinadas descrições:

Exemplo:
  Se tiver 70 mil variações de Euler Taveira demora bastante para lista os 10 primeiros.

Euler Taveira de Oliveira-2 wrote
mateusgra escreveu:
> E se eu quiser pesquisar que comece com Euler e termine com oliveira.
> Indice com _pattern_ops so aceita pesquisa no inicio do campo.
A documentação é o seu melhor amigo. Você testou o que mandei? É claro que ele
usa o índice; só não vai utilizar se você fizer uma pesquisa com sufixo.

euler=# select * from bar where a ~ '^euler.*oliveira';
             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.*oliveira';
                                                     QUERY PLAN

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

> E indice gist não aceita indice composto.
>
Quem falou em índice GiST? É um B-Tree mesmo.

> Não consegui resolver esse problema ?
>
Faltou ler as referências que enviei. :( Se você não conhece o poder das
funcionalidades do PostgreSQL fica difícil você saber se algo se encaixa na
sua solução.


--
  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
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

Re: TSearch palavar Inicial

Euler Taveira de Oliveira
mateusgra escreveu:
>   Se tiver 70 mil variações de Euler Taveira demora bastante para lista os
> 10 primeiros.
>
Qual o EXPLAIN ANALYZE da consulta?


--
  Euler Taveira de Oliveira
  http://www.timbira.com/
_______________________________________________
pgbr-geral mailing list
[hidden email]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

Re: TSearch palavar Inicial

Mateus Gra
explain analyze select * from bar where a ~ '^MARIA DAS.*GRACAS' LIMIT 10;
                                                             QUERY PLAN
------------------------------------------------------------------------------------------------------------------------------------
 Limit  (cost=0.00..22.86 rows=1 width=62) (actual time=115.751..468760.019 rows=10 loops=1)
   ->  Index Scan using bari on bar  (cost=0.00..22.86 rows=1 width=62) (actual time=115.739..468759.911 rows=10 loops=1)
         Index Cond: (((a)::text ~>=~ 'MARIA DAS'::character varying) AND ((a)::text ~<~ 'MARIA DAT'::character varying))
         Filter: ((a)::text ~ '^MARIA DAS.*GRACAS'::text)
 Total runtime: 468760.159 ms
(5 rows)
Euler Taveira de Oliveira-2 wrote
mateusgra escreveu:
>   Se tiver 70 mil variações de Euler Taveira demora bastante para lista os
> 10 primeiros.
>
Qual o EXPLAIN ANALYZE da consulta?


--
  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
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

Re: TSearch palavar Inicial

Euler Taveira de Oliveira
mateusgra escreveu:

> explain analyze select * from bar where a ~ '^MARIA DAS.*GRACAS' LIMIT 10;
>                                                              QUERY PLAN
> ------------------------------------------------------------------------------------------------------------------------------------
>  Limit  (cost=0.00..22.86 rows=1 width=62) (actual time=115.751..468760.019
> rows=10 loops=1)
>    ->  Index Scan using bari on bar  (cost=0.00..22.86 rows=1 width=62)
> (actual time=115.739..468759.911 rows=10 loops=1)
>          Index Cond: (((a)::text ~>=~ 'MARIA DAS'::character varying) AND
> ((a)::text ~<~ 'MARIA DAT'::character varying))
>          Filter: ((a)::text ~ '^MARIA DAS.*GRACAS'::text)
>  Total runtime: 468760.159 ms
> (5 rows)
>
O plano de execução é esse mesmo mas estou imaginando o porquê do tempo
excessivo de processamento no Limit. Qual o tamanho desta tabela _bar_ e do
índice _bari_? Qual a versão do PostgreSQL e SO? Qual o tamanho do seu _shared
buffers_? Esse índice foi criado recentemente? Se não foi, um REINDEX diminui
o tempo de processamento?


--
  Euler Taveira de Oliveira
  http://www.timbira.com/
_______________________________________________
pgbr-geral mailing list
[hidden email]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

Re: TSearch palavar Inicial

Mateus Gra
Postgresql 8.2.7, FreeBSD 7.1

tabela bar = 14GB
Indice bari = 7264 MB
shared_buffers =512MB

O indice foi cirado Hj as 08:00

Euler Taveira de Oliveira-2 wrote
mateusgra escreveu:
> explain analyze select * from bar where a ~ '^MARIA DAS.*GRACAS' LIMIT 10;
>                                                              QUERY PLAN
> ------------------------------------------------------------------------------------------------------------------------------------
>  Limit  (cost=0.00..22.86 rows=1 width=62) (actual time=115.751..468760.019
> rows=10 loops=1)
>    ->  Index Scan using bari on bar  (cost=0.00..22.86 rows=1 width=62)
> (actual time=115.739..468759.911 rows=10 loops=1)
>          Index Cond: (((a)::text ~>=~ 'MARIA DAS'::character varying) AND
> ((a)::text ~<~ 'MARIA DAT'::character varying))
>          Filter: ((a)::text ~ '^MARIA DAS.*GRACAS'::text)
>  Total runtime: 468760.159 ms
> (5 rows)
>
O plano de execução é esse mesmo mas estou imaginando o porquê do tempo
excessivo de processamento no Limit. Qual o tamanho desta tabela _bar_ e do
índice _bari_? Qual a versão do PostgreSQL e SO? Qual o tamanho do seu _shared
buffers_? Esse índice foi criado recentemente? Se não foi, um REINDEX diminui
o tempo de processamento?


--
  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
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

Re: TSearch palavar Inicial

Euler Taveira de Oliveira
mateusgra escreveu:
> Postgresql 8.2.7, FreeBSD 7.1
            ^^^^^^^
Sugiro atualizar para 8.2.13; vários bugs foram corrigidos e, você não precisa
mexer nos dados, ou seja, é necessário apenas atualizar os binários.

> tabela bar = 14GB
> Indice bari = 7264 MB
> shared_buffers =512MB
                 ^^^^^^^
Aha. Por que o valor do _shared buffers_ está tão baixo? Quanto de memória tem
disponível? É um servidor dedicado ao PostgreSQL?


--
  Euler Taveira de Oliveira
  http://www.timbira.com/
_______________________________________________
pgbr-geral mailing list
[hidden email]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

Re: TSearch palavar Inicial

jorge vilela
Acho que, talvez não seja a unica justificativa, mas você com 14GB em uma só tabela, mais 7GB de índice em apenas 512mb de shared_buffers... Talvez seja esse o problema, o acesso ao disco é constante não é?


2009/6/17 Euler Taveira de Oliveira <[hidden email]>
mateusgra escreveu:
> Postgresql 8.2.7, FreeBSD 7.1
           ^^^^^^^
Sugiro atualizar para 8.2.13; vários bugs foram corrigidos e, você não precisa
mexer nos dados, ou seja, é necessário apenas atualizar os binários.

> tabela bar = 14GB
> Indice bari = 7264 MB
> shared_buffers =512MB
                ^^^^^^^
Aha. Por que o valor do _shared buffers_ está tão baixo? Quanto de memória tem
disponível? É um servidor dedicado ao PostgreSQL?


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


_______________________________________________
pgbr-geral mailing list
[hidden email]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

Re: TSearch palavar Inicial

Mateus Gra
In reply to this post by Euler Taveira de Oliveira
Pelo que li na documentação o ideal é usar 1/3 da ram para o shared_buffers. É um servidor dedicado ao postgresql e tem 4GB de ram com 200 conexoes simultaneas.


Euler Taveira de Oliveira-2 wrote
mateusgra escreveu:
> Postgresql 8.2.7, FreeBSD 7.1
            ^^^^^^^
Sugiro atualizar para 8.2.13; vários bugs foram corrigidos e, você não precisa
mexer nos dados, ou seja, é necessário apenas atualizar os binários.

> tabela bar = 14GB
> Indice bari = 7264 MB
> shared_buffers =512MB
                 ^^^^^^^
Aha. Por que o valor do _shared buffers_ está tão baixo? Quanto de memória tem
disponível? É um servidor dedicado ao PostgreSQL?


--
  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
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

Re: TSearch palavar Inicial

Euler Taveira de Oliveira
mateusgra escreveu:
> Pelo que li na documentação o ideal é usar 1/3 da ram para o shared_buffers.
> É um servidor dedicado ao postgresql e tem 4GB de ram com 200 conexoes
> simultaneas.
>
Não tem isso de ideal (é uma maneira "didática" que usamos para aconselhar
usuários com menos experiência ;).

Eu não conheço a sua aplicação, mas utilizar apenas 8% da memória para _shared
buffers_ (quando se tem consultas que utilizam mais do que isso -- 7GB só um
índice!), *não* é o ideal. Meu chute inicial seria pelo menos 768 MB ou mesmo
1GB. Mas para ser mais preciso é necessário saber mais sobre o seu ambiente
tais como tamanho dos objetos e frequência de uso deles (aka pg_stat*).

E mais, dependendo do tamanho da sua base e se o uso desse índice for algo
frequente, eu recomendo que compre mais memória para a máquina.


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

12
Loading...