ďťż
 
postgresql select + ilike '%test&' ďťż
 
postgresql select + ilike '%test&'
Zobacz wiadomości
 
Cytat
A gdyby tak się wedrzeć na umysłów górę, / Gdyby stanąć na ludzkich myśli piramidzie, / I przebić czołem przesądów chmurę, / I być najwyższą myślą wcieloną. . . Juliusz Słowacki, Kordian
Indeks BCB i MySQL subiekt gt fototapeta
 
  Witamy

postgresql select + ilike '%test&'



Acid - 11-07-2007 00:00
postgresql select + ilike '%test&'
  witam

mam taką baze danych

CREATE TABLE words
(
id bigserial NOT NULL,
word text,
CONSTRAINT words_pkey PRIMARY KEY (id)
)

w polu word, mam okolo 3.5 miliona słów w jezyku polskim ze wszelkimi
ich odmianami

szuaknie czegos takieg:

SELECT word FROM words WHERE word like '%test%';

zajmuje bazie na maszynie 1.4ghz + 1gb ramu około 4-5 sekund

wiec "nakladam" index:

CREATE INDEX gist_idx
ON words
USING gist
(word);

i powtarzam zaptanie ;/ efet dokladnie taki sam zapytanie trwa okolo
4-5 sekudn

ma ktos pomysl na optymalizacie tego? lub wytkniecie mi bledu w moim
rozumowaniu?

pozdrawiam
acid.





Acid - 11-07-2007 00:00

  dodam jeszze baza wazy okolo 200MB index 240mb




Lukasz Czarnowski - 11-07-2007 00:00

  On Tue, 10 Jul 2007 12:16:59 -0700
Acid <michal@bagrowski.com> wrote:

> witam

hej

> mam taką baze danych
>
> CREATE TABLE words
> (
> id bigserial NOT NULL,
> word text,
> CONSTRAINT words_pkey PRIMARY KEY (id)
> )
>
> w polu word, mam okolo 3.5 miliona słów w jezyku polskim ze wszelkimi
> ich odmianami
>
> szuaknie czegos takieg:
>
> SELECT word FROM words WHERE word like '%test%';
>
> zajmuje bazie na maszynie 1.4ghz + 1gb ramu około 4-5 sekund
[...]
> ma ktos pomysl na optymalizacie tego? lub wytkniecie mi bledu w moim
> rozumowaniu?

.... a może zerknij tutaj:

http://www.depesz.com/index.php/2007...-rozszerzanie/

Pozdrawiam
--
Lukasz Czarnowski
relaks@ciach_o2.pl




Acid - 11-07-2007 00:00

  heh :] wlasciwie to post wlasie depesza pociagnal mnie stworzenia tej
bazy, chce jej uzyc do wygenerwania bazy polskich testków wlasnie do
testow tsercha... wiec raczej ten art mi w niczym nie pomoze

pozdr.
acid.





Lukasz Czarnowski - 11-07-2007 00:00

  On Tue, 10 Jul 2007 12:32:44 -0700
Acid <michal@bagrowski.com> wrote:

> heh :] wlasciwie to post wlasie depesza pociagnal mnie stworzenia tej
> bazy, chce jej uzyc do wygenerwania bazy polskich testków wlasnie do
> testow tsercha... wiec raczej ten art mi w niczym nie pomoze

A to trzeba było tak od razu :o) Jaki jest w takim cel użycia ILIKE dla
tego słownika? ILIKE %foo% nie skorzysta z indeksu.

Pozdrawiam
--
Lukasz Czarnowski
relaks@ciach_o2.pl




Acid - 11-07-2007 00:00

  sens hm... generalnie zaden... ale chcialbym wiedzec jak costakiego
przyszybszyc? bo i tak do generowania bede uzywal losowych rekordów.
ktore juz wybieraja mi sie szybciucho tez dzieki pewniemy postowi
depesza...

generalnie chce zrobic taka poboczna wyszukiwarke słow, powiedzmy
szukam sobie %test% i mam wszystkie poslkie wyrazy z test, których w
tej bazzie jest okolo 1400 no ale 5 sekund troche duzo na odpowiedz

wiec jak to zrobic szybsze? ;]

On 10 Lip, 21:59, Lukasz Czarnowski <relaks@ciach_o2.pl> wrote:
> On Tue, 10 Jul 2007 12:32:44 -0700
>
> Acid <mic...@bagrowski.com> wrote:
> > heh :] wlasciwie to post wlasie depesza pociagnal mnie stworzenia tej
> > bazy, chce jej uzyc do wygenerwania bazy polskich testków wlasnie do
> > testow tsercha... wiec raczej ten art mi w niczym nie pomoze
>
> A to trzeba było tak od razu :o) Jaki jest w takim cel użycia ILIKE dla
> tego słownika? ILIKE %foo% nie skorzysta z indeksu.
>
> Pozdrawiam
> --
> Lukasz Czarnowski
> relaks@ciach_o2.pl




Lukasz Czarnowski - 11-07-2007 00:00

  On Tue, 10 Jul 2007 13:08:16 -0700
Acid <michal@bagrowski.com> wrote:

> sens hm... generalnie zaden... ale chcialbym wiedzec jak costakiego
> przyszybszyc? bo i tak do generowania bede uzywal losowych rekordów.
> ktore juz wybieraja mi sie szybciucho tez dzieki pewniemy postowi
> depesza...
>
> generalnie chce zrobic taka poboczna wyszukiwarke słow, powiedzmy
> szukam sobie %test% i mam wszystkie poslkie wyrazy z test, których w
> tej bazzie jest okolo 1400 no ale 5 sekund troche duzo na odpowiedz
>
> wiec jak to zrobic szybsze? ;]

Po bandzie: wynająć klaster i wygenerować wynik dla każdego z
3,5mln rekordów ;o) Z tego co widzę przykładowo słownik online na
kurniku uwzględnia opcje "zaczynające się od:" i "kończące się na:" dla
których przy LIKE można w sprytny sposób użyć indeksu. Może koledzy
podpowiedzą jakieś ciekawe rozwiązanie.

Pozdrawiam
--
Lukasz Czarnowski
relaks@ciach_o2.pl




Acid - 11-07-2007 00:00

  On 10 Lip, 22:44, Lukasz Czarnowski <relaks@ciach_o2.pl> wrote:
slownok jest wygenerowany na podstawie slownika z kurnika ;] pytanie
jak pytac o slowa szybko i sprytnie ;]

> On Tue, 10 Jul 2007 13:08:16 -0700
>
> Acid <mic...@bagrowski.com> wrote:
> > sens hm... generalnie zaden... ale chcialbym wiedzec jak costakiego
> > przyszybszyc? bo i tak do generowania bede uzywal losowych rekordów.
> > ktore juz wybieraja mi sie szybciucho tez dzieki pewniemy postowi
> > depesza...
>
> > generalnie chce zrobic taka poboczna wyszukiwarke słow, powiedzmy
> > szukam sobie %test% i mam wszystkie poslkie wyrazy z test, których w
> > tej bazzie jest okolo 1400 no ale 5 sekund troche duzo na odpowiedz
>
> > wiec jak to zrobic szybsze? ;]
>
> Po bandzie: wynająć klaster i wygenerować wynik dla każdego z
> 3,5mln rekordów ;o) Z tego co widzę przykładowo słownik online na
> kurniku uwzględnia opcje "zaczynające się od:" i "kończące się na:" dla
> których przy LIKE można w sprytny sposób użyć indeksu. Może koledzy
> podpowiedzą jakieś ciekawe rozwiązanie.
>
> Pozdrawiam
> --
> Lukasz Czarnowski
> relaks@ciach_o2.pl




=?ISO-8859-2?Q?Pawe=B3_Matejski?= - 12-07-2007 00:09

  Acid wrote:
> witam
>
> mam taką baze danych
>
> CREATE TABLE words
> (
> id bigserial NOT NULL,
> word text,
> CONSTRAINT words_pkey PRIMARY KEY (id)
> )
>
> w polu word, mam okolo 3.5 miliona słów w jezyku polskim ze wszelkimi
> ich odmianami
>
> szuaknie czegos takieg:
>
> SELECT word FROM words WHERE word like '%test%';
>
> zajmuje bazie na maszynie 1.4ghz + 1gb ramu około 4-5 sekund
>
> wiec "nakladam" index:
>
> CREATE INDEX gist_idx
> ON words
> USING gist
> (word);
>
>
> i powtarzam zaptanie ;/ efet dokladnie taki sam zapytanie trwa okolo
> 4-5 sekudn
>
> ma ktos pomysl na optymalizacie tego?

Nie da się.

>lub wytkniecie mi bledu w moim rozumowaniu?

A przedstawiłeś tu jakieś?
Nie pisząc skąd Ci takie zapytanie wyszło, nie dałeś nam pola manewru.

--
P.M.




hubert depesz lubaczewski - 12-07-2007 00:09

  On 2007-07-10, Acid <michal@bagrowski.com> wrote:
> On 10 Lip, 22:44, Lukasz Czarnowski <relaks@ciach_o2.pl> wrote:
> slownok jest wygenerowany na podstawie slownika z kurnika ;] pytanie
> jak pytac o slowa szybko i sprytnie ;]

like '%cos%' nie będzie indeksowane.

natomiast - jeśli koniecznie chcesz takiego czegoś szukać to masz kilka
sposobów.

1. n-gramy (trigramy), one dadzą wyszukiwanie przybliżone i na to
nakładasz "like'a" i jest trochę szybciej
2. inna metoda.
załóżmy, że masz tabelę:
id | slowo
zmień ją na:
id | prefix | slowo

i wypełniaj tak:
1 | depesz | depesz
1 | epesz | depesz
1 | pesz | depesz
1 | esz | depesz
1 | sz | depesz
1 | z | depesz

oczywiście ilość rekordów będzie olbrzymia.
na pole "prefix" zakładasz index zwykły btree, ale z text_pattern_ops

i potem jak chcesz szukać słów %test% to zamiast:
select * from tabelka where slowo ilike '%test%'
dajesz:
select distinct slowo from tabelka where prefix like 'test%';

działa to dzięki temu, że wyszukiwanie like 'cos%' moze byc indeksowane.

depesz

--
quicksil1er: "postgres is excellent, but like any DB it requires a
highly paid DBA. here's my CV!" :)
http://www.depesz.com/ - blog dla ciebie (i moje CV)




Acid - 12-07-2007 00:09

  On 11 Lip, 09:09, hubert depesz lubaczewski <dep...@depesz.com> wrote:
> 1. n-gramy (trigramy), one dadzą wyszukiwanie przybliżone i na to
> nakładasz "like'a" i jest trochę szybciej

pogoogluje przetestuje.

> 2. inna metoda.
> załóżmy, że masz tabelę:
> id | slowo
> zmień ją na:
> id | prefix | slowo
>
> i wypełniaj tak:
> 1 | depesz | depesz
> 1 | epesz | depesz
> 1 | pesz | depesz
> 1 | esz | depesz
> 1 | sz | depesz
> 1 | z | depesz
>
> oczywiście ilość rekordów będzie olbrzymia.

oj na pewno biorac pod uwage ze teraz jest 3.5 mln rekordów, i średnia
długość słowa to 12 znaków.... :]

> na pole "prefix" zakładasz index zwykły btree, ale z text_pattern_ops
>
> i potem jak chcesz szukać słów %test% to zamiast:
> select * from tabelka where slowo ilike '%test%'
> dajesz:
> select distinct slowo from tabelka where prefix like 'test%';
>
> działa to dzięki temu, że wyszukiwanie like 'cos%' moze byc indeksowane.
>
> depesz

napewno sprobuje, jeszcze dzisiaj bede meczyl baze o wygenerowanie
czegost akiego

pozdrawiam dzieki za podpowiedz.

On 11 Lip, 03:15, Paweł Matejski <m...@spam.madej.pl.eu.org> wrote:
> Acid wrote:
>
> > ma ktos pomysl na optymalizacie tego?
>
> Nie da się.

a jednak sie da

> >lub wytkniecie mi bledu w moim rozumowaniu?
>
> A przedstawiłeś tu jakieś?
> Nie pisząc skąd Ci takie zapytanie wyszło, nie dałeś nam pola manewru.

zapytanie wyszlo z checi przetestowania takowej bazy danych. i jestem
"zawiedziony" wynikami, i staram sie uzyskac lepszy wynik na tym polu




=?ISO-8859-2?Q?Pawe=B3_Matejski?= - 12-07-2007 00:09

  Acid wrote:
>
> On 11 Lip, 03:15, Paweł Matejski <m...@spam.madej.pl.eu.org> wrote:
>> Acid wrote:
>>
>>> ma ktos pomysl na optymalizacie tego?
>> Nie da się.
>
> a jednak sie da

Akurat Ci like przyspieszyli....
Tak naprawdę wszyscy zgadują co chcesz uzyskać.

>>> lub wytkniecie mi bledu w moim rozumowaniu?
>> A przedstawiłeś tu jakieś?
>> Nie pisząc skąd Ci takie zapytanie wyszło, nie dałeś nam pola manewru.
>
> zapytanie wyszlo z checi przetestowania takowej bazy danych. i jestem
> "zawiedziony" wynikami, i staram sie uzyskac lepszy wynik na tym polu

Ale co chcesz przetestować? Like? Jest wolny. Przetestowałeś.
Wniosek - wyszukiwanie dowolnego ciągu znaków w dowolnym tekście, jest wolne
i należy przeanalizować problem, czy nie da się zastosować dodatkowych ograniczeń.
Żeby nie było, że tylko marudzę.
Jeśli 'test' to słowo, to należy wykorzystać to, że w języku polskim jest ograniczona
liczba przedrostków, więc robisz zapytanie postaci:
like 'test%' or like 'po' || 'test%' or ...

--
P.M.




Acid - 12-07-2007 00:09

  On 11 Lip, 14:16, Paweł Matejski <m...@spam.madej.pl.eu.org> wrote:
> Acid wrote:
>
> > On 11 Lip, 03:15, Paweł Matejski <m...@spam.madej.pl.eu.org> wrote:
> >> Acid wrote:
>
> >>> ma ktos pomysl na optymalizacie tego?
> >> Nie da się.
>
> > a jednak sie da
>
> Akurat Ci like przyspieszyli....
> Tak naprawdę wszyscy zgadują co chcesz uzyskać.
>
> >>> lub wytkniecie mi bledu w moim rozumowaniu?
> >> A przedstawiłeś tu jakieś?
> >> Nie pisząc skąd Ci takie zapytanie wyszło, nie dałeś nam pola manewru.
>
> > zapytanie wyszlo z checi przetestowania takowej bazy danych. i jestem
> > "zawiedziony" wynikami, i staram sie uzyskac lepszy wynik na tym polu
>
> Ale co chcesz przetestować? Like? Jest wolny. Przetestowałeś.
> Wniosek - wyszukiwanie dowolnego ciągu znaków w dowolnym tekście, jest wolne
> i należy przeanalizować problem, czy nie da się zastosować dodatkowych ograniczeń.
> Żeby nie było, że tylko marudzę.
> Jeśli 'test' to słowo, to należy wykorzystać to, że w języku polskim jest ograniczona
> liczba przedrostków, więc robisz zapytanie postaci:
> like 'test%' or like 'po' || 'test%' or ...
>
> --
> P.M.

no to ze jest wolny to zauwazylem, staram sie uzyskac takie same
wyniki jak % % szybciej

http://phpfi.com/248956

powyzej 3 zapytania do bazy o "rower" "mama" "babcia" z wynikami,
kazde okolo 5 sekund, %test% byl tylko przykladem (sam test zwraca
okolo 1400 wyników :])

po prostu chodiz mi o zrobienie szybkiej wyszukiwarki słów, w raz z
ich "odmianami" czyli po prostu chce wyciagnac wszystko co zawiera
dane słowo

pozd.




=?ISO-8859-2?Q?Pawe=B3_Matejski?= - 12-07-2007 00:09

  Acid wrote:
> On 11 Lip, 14:16, Paweł Matejski <m...@spam.madej.pl.eu.org> wrote:
>> Acid wrote:
>
> no to ze jest wolny to zauwazylem, staram sie uzyskac takie same
> wyniki jak % % szybciej
>
> http://phpfi.com/248956
>
> powyzej 3 zapytania do bazy o "rower" "mama" "babcia" z wynikami,
> kazde okolo 5 sekund, %test% byl tylko przykladem (sam test zwraca
> okolo 1400 wyników :])
>
> po prostu chodiz mi o zrobienie szybkiej wyszukiwarki słów, w raz z
> ich "odmianami" czyli po prostu chce wyciagnac wszystko co zawiera
> dane słowo

Tylko że do szukania odmian like się nie nadaje (np. rząd, rzędzie - a są
i bardziej skomplikowane przypadki).
Żeby poprawnie, a jednocześnie szybko, wybrać wszystkie odmiany szukanego
wyrazu musisz sobie stworzyć tabele (słowo,rdzeń). Wtedy wyszukujesz słowo
(bez likie więc z użyciem indexu) i znajdujesz jego rdzeń. Potem wyszukujesz
rdzeń (bez like a więc z użyciem indexu) i otrzymujesz wszystkie odmiany
danego wyrazu. Szybko i poprawnie!

--
P.M.




Acid - 12-07-2007 00:09

  On 11 Lip, 15:57, Paweł Matejski <m...@spam.madej.pl.eu.org> wrote:
> Acid wrote:
> > On 11 Lip, 14:16, Paweł Matejski <m...@spam.madej.pl.eu.org> wrote:
> >> Acid wrote:
>
> > no to ze jest wolny to zauwazylem, staram sie uzyskac takie same
> > wyniki jak % % szybciej
>
> >http://phpfi.com/248956
>
> > powyzej 3 zapytania do bazy o "rower" "mama" "babcia" z wynikami,
> > kazde okolo 5 sekund, %test% byl tylko przykladem (sam test zwraca
> > okolo 1400 wyników :])
>
> > po prostu chodiz mi o zrobienie szybkiej wyszukiwarki słów, w raz z
> > ich "odmianami" czyli po prostu chce wyciagnac wszystko co zawiera
> > dane słowo
>
> Tylko że do szukania odmian like się nie nadaje (np. rząd, rzędzie - a są
> i bardziej skomplikowane przypadki).
> Żeby poprawnie, a jednocześnie szybko, wybrać wszystkie odmiany szukanego
> wyrazu musisz sobie stworzyć tabele (słowo,rdzeń). Wtedy wyszukujesz słowo
> (bez likie więc z użyciem indexu) i znajdujesz jego rdzeń. Potem wyszukujesz
> rdzeń (bez like a więc z użyciem indexu) i otrzymujesz wszystkie odmiany
> danego wyrazu. Szybko i poprawnie!
>
> --
> P.M.

napisałem "odmianami"... chodzi mi wlasnie doklandie o takie wyniki
jak zwraca %like% no nic wlasnie buduje baze w/g tego co podał depesz
zobaczymy co z tego wyjdzie :]

a.




=?ISO-8859-2?Q?Pawe=B3_Matejski?= - 12-07-2007 00:09

  Acid wrote:
> On 11 Lip, 15:57, Paweł Matejski <m...@spam.madej.pl.eu.org> wrote:
>
> napisałem "odmianami"... chodzi mi wlasnie doklandie o takie wyniki
> jak zwraca %like% no nic wlasnie buduje baze w/g tego co podał depesz
> zobaczymy co z tego wyjdzie :]

A, jeśli tak, to ok. A przyda Ci sie to do czegoś innego oprócz testów? ;)

--
P.M.




Acid - 12-07-2007 00:09

  On 11 Lip, 18:29, Paweł Matejski <m...@spam.madej.pl.eu.org> wrote:
> Acid wrote:
> > On 11 Lip, 15:57, Paweł Matejski <m...@spam.madej.pl.eu.org> wrote:
>
> > napisałem "odmianami"... chodzi mi wlasnie doklandie o takie wyniki
> > jak zwraca %like% no nic wlasnie buduje baze w/g tego co podał depesz
> > zobaczymy co z tego wyjdzie :]
>
> A, jeśli tak, to ok. A przyda Ci sie to do czegoś innego oprócz testów? ;)
>
> --
> P.M.

szczeze? nie :]

ale chce poznac "mozliwosci" bazy ;] jak narazie "przerobiłem" 470k
słow, mam 3.5 mln w tabeli wynikowej :] baza 220mb index 117 mb ;]
ciekawe na czym sie skonczy :]
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • effulla.pev.pl
  • comp
    [PostgreSQL] - jak =?ISO-8859-2?Q?zabezpieczy=E6_interesy_tw?==?ISO-8859-2?Q?=F3rcy_systemu_=3F=3F=3F?= postgresql - int/int [PostgreSQL] jak =?ISO-8859-2?Q?pobra=E6_warto=B6=E6_zwracan?==?ISO-8859-2?Q?=B1_przez_funkcj=EA=3F?= [postgresql] INSERT OR UPDATE - jak =?ISO-8859-2?Q?b=EAdzie_na?==?ISO-8859-2?Q?jlepiej=3F?= [postgresql] kilka =?ISO-8859-2?Q?rekord=F3w_subquery_jako_?==?ISO-8859-2?Q?string?= [PostgreSQL] Jak =?ISO-8859-2?Q?po=B3=B1czy=E6_funkcje_z_w?==?ISO-8859-2?Q?idokiem?= Postgres - replikcja master-master Dopasowanie do "najlepszego" dopasowania :) [ PostgreSQL] Problemy z =?ISO-8859-2?Q?instalacj=B1_PostgreSQL_na_syste?==?ISO-8859-2?Q?mach_Windows?= =?ISO-8859-2?Q?[psql]_Polskie_t=B3umaczenie_?= =?ISO-8859-2?Q?licencji_BSD_dla_PostgreSQL=3F?=
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • tejsza.htw.pl
  • Cytat

    Decede mihi sole - nie zasłaniaj mi słonca.
    Gdy kogoś kochasz, jesteś jak stworzyciel świata - na cokolwiek spojrzysz, nabiera to kształtu, wypełnia się barwą, światłem. Powietrze przytula się do ciebie, choćby był mróz, a ty masz w sobie tyle radości, że musisz ją rozdawać wokoło, bo się w tobie nie mieści
    Hoc fac - tak czyń.
    A tergo - od tyłu; z tyłu.
    I czarne włosy posiwieją. Safona

    Valid HTML 4.01 Transitional

    Free website template provided by freeweblooks.com