Internet Info, s.r.o. Lupa Měšec Podnikatel Root Zdroják DigiZone Slunečnice Vitalia TopDrive KupDnes Navrcholu NovýTarif Dobrý web Weblogy Woko Jagg Computer.cz SK: MojeLinky

Hlavní navigace

Názory k článku
Fulltextování v PostgreSQL - modul tsearch2

Jerry
Jerry (neregistrovaný)
6. 1. 2004 1:27 Nový

Odvolávám

celé vlákno

Odvolávám vše, co jsem před časem tady na Rootu psal o nepoužitelnosti fulltextu u PSQL - bohužel mě tehdy nikdo neopravil, naopak mi tehdy potvrdili mojí nesprávnou představu o fungování tsearch2 (vycházela z nějakých starých pseudofulltextů, které kdysi pro PSQL byly). Pokud to funguje takhle, líbí se mi to.
Náhodou, když už jsme se dotkli tohoto tématu - nezná někdo nějaké podobné nekomerční fulltextové rozšíření pro Firebird (nejlépe 1.5)? S PSQL (zatím) nedělám, ale Firebird používám a fulltext občas citelně chybí...:-(

lzap
lzap (neregistrovaný)
6. 1. 2004 11:56 Nový

Re: Odvolávám

celé vlákno

Podle mě se to od toho starého a nepoužitelného řešení moc neliší. Jak jste si všimli v diskuzi, čeština nefunguje, což je docela problém. Takže je to vlastně na nic.

Na druhou stranu stemming je velice dobrá věc, snažím se něco podobného implementovat ve svém programu, ale nedaří se. Všechny slovníky jsou open-source, což je pro mě nepřijatelné...

Pavel
Pavel (neregistrovaný)
7. 1. 2004 7:47 Nový

Re: Odvolávám

celé vlákno

Co znamena čeština nefunguje? Řekl bych, že funguje, resp. jediné co tam není je dohledání bez diakritiky. V podstatě si můžete překonvertovat slovníky do ascii, sice je budete mít dvakrát, ale teoreticky by mohl zafungovat převod na lexémy i bez diakritiky. Výsledek může být dost neurčitý, stejně jako kdekoliv jinde, kde se hraje s analýzou přirozeného textu. Nevím proč by měly být Open Source slovníky nepřijatelné - dost záleží pod jakou licencí jsou šířené, netuším jestli pod GNU. Jinak si můžete určitě pro češtinu nějaké slovníky koupit

lzap
lzap (neregistrovaný)
7. 1. 2004 12:07 Nový

Re: Odvolávám

celé vlákno

Konvertovat slovníky do ASCII je blbost, ztrátou diakritiky ztrácíte informaci a program bude nacházet špatné stemmy. Ono by se dalo přimhouřit oko, ale pak mohou vyskočit nepřesné výsledky...

Slovníků jsem našel jen pár, myslím těch, které umějí koncovky. Všechny pod GPL. Bohužel jsem nenašel žádný, který by se dal koupit.

Pakliže funguje, tak je to v pořádku. Já to zkoušel, když nefungovala. Jinak - jak je to s rychlostí?

Pavel
Pavel (neregistrovaný)
7. 1. 2004 12:24 Nový

Re: Odvolávám

celé vlákno

Rychlost jsem neměřil, takže žádná absolutní čísla vám nepovím. Doufal jsem, že někdo kdo článek četl, a má větší databázi, že to zkusí. Subjektivně se mi to zdálo rychlé, dle konference to má být rychlé také. Chvilku trvá natažení slovníku při první lex. analýze.

moje
moje (neregistrovaný)
8. 1. 2004 20:40 Nový

Re: Odvolávám

celé vlákno

Ja to muzu zkusit zmerit a porovnat s MySQL. V soucasne dobe testuju fulltext na MySQL a Postgresu a mam k dispozici asi 1.4GiB txt dat (cca z 11GiB ruzne dokumentace), takze to tam pres vikend nasypu a zkusim otestovat. Je to relativne pomaly stroj (PII@366), ale to by pro porovnani nemelo prilis vadit. Kdyztak se mi ozvete pokud budete chtit podrobnosti.

Pavel
Pavel (neregistrovaný)
9. 1. 2004 6:29 Nový

Re: Odvolávám

celé vlákno

Jde spis o to, kolik mate pameti, a jek mate nakonfigurovany postgres. I kdyz 7.4 je nastavena tak, ze pocita, ze mate dost RAM.

moje
moje (neregistrovaný)
9. 1. 2004 7:40 Nový

Re: Odvolávám

celé vlákno

Pameti mam primerene (800MiB) a ten stroj neni prilis pametove zatizeny, takze muzu pocitat s tim ze bude volna. Na konfiguraci postgresu se muzu podivat, protoze zatim bezim na defaultni.

Pavel
Pavel (neregistrovaný)
6. 1. 2004 7:18 Nový

Oprava odkazu

celé vlákno

V textu je chybně uvedený link na slovníky, má být http://postgresql.ok.cz/download/tseach2cz.tar.gz

Johanka the Editor
Johanka the Editor (neregistrovaný)
6. 1. 2004 10:10 Nový

Re: Oprava odkazu

celé vlákno

V clanku jsem to opravila, tady jsi to napsal taky blbe :) (tseach -> tsearch). Sorry, mela jsem to lip zkontrolovat uz vcera...

Pavel
Pavel (neregistrovaný)
6. 1. 2004 11:08 Nový

Re: Oprava odkazu

celé vlákno

zrejme se k tobě už nedostala oprava, posilal jsem Vám opravu, nic se nestalo, a venku svítí sníh :->

Karel Zak
Karel Zak (neregistrovaný)
6. 1. 2004 7:58 Nový

Pekne...

celé vlákno

Super clanek, je vic takovych :-)

ado
ado (neregistrovaný)
6. 1. 2004 9:36 Nový

ft

celé vlákno

..zatial to nie je priorita, ale casom by sa mala aj priamo v postgre objavit moznost indexovat fulltextom.. ale toto je pekne riesenie terajsej situacie :)

Pedro
Pedro (neregistrovaný)
6. 1. 2004 9:43 Nový

Diakritika

celé vlákno

A co hledani a diakritika ? Lze zadat hledany vyraz bez diakritiky, aby se nalezl ulozeny s diakritikou (nebo naopak) ? Jak se tohle resi (treba google to umi). ?

Pavel
Pavel (neregistrovaný)
6. 1. 2004 9:59 Nový

Re: Diakritika

celé vlákno

nikde jsem si nevsiml, ze by se tam diakritika resila, takze predpokladam, ze to spis neumi

Pedro
Pedro (neregistrovaný)
6. 1. 2004 10:03 Nový

Re: Diakritika

celé vlákno

No prave, ja jsem si take nevsiml. Je to spis obecnejsi dotaz - jak obecne toto resit ? Nejspis nejakym indexovanim, indexovat pres funkci, ktera diakritiku odstrani. Pri zpracovani dotazu pak take nejprve diakritiku odstranit. Nebo nahradit vsechny non-ascii znaky nejakym zastupnym znakem (? jako wildcard). ?

Jerry
Jerry (neregistrovaný)
6. 1. 2004 10:08 Nový

Re: Diakritika

celé vlákno

Nešlo by to řešit pomocí slovníku? Když může simple slovník konvertovat velká písmena na malá, proč by nemohlo jít udělat slovník pro zbavení se diakritiky?

pajout
pajout (neregistrovaný)
6. 1. 2004 10:38 Nový

Re: Diakritika

celé vlákno

create or replace function lowerascii(text) returns text as
'
begin
return translate($1,
''AÁáBCČčDĎďEĚěÉéFGHIÍíJKLMNŇňOÓóPQRŘřSŠšTŤťUÚúŮůVWXYÝýZŽž'',
''aaabcccdddeeeeefghiiijklmnnnooopqrrrssstttuuuuuvwxyyyzzz'');
end;
' language plpgsql immutable returns null on null input;

Pavel
Pavel (neregistrovaný)
6. 1. 2004 11:55 Nový

Re: Diakritika

celé vlákno

nebo jeste jednoduseji

select to_ascii('Přiliš žluťoučký kůň','latin2');
to_ascii
----------------------
Prilis zlutoucky kun

pajout
pajout (neregistrovaný)
6. 1. 2004 12:41 Nový

Re: Diakritika

celé vlákno

To ale nebude fungovat v utf8 databazi.

Pavel Stěhule
Pavel Stěhule (neregistrovaný)
6. 1. 2004 14:07 Nový

Re: Diakritika

celé vlákno

to ne,

Jan Cermak
30. 3. 2005 23:35 Nový

Re: Diakritika

celé vlákno
ale ano ;] ... akorat musite string prekonvertovat nejdrive do latin2 ...
napr. takto:
conn=# select * from conn.t_ulice
where to_ascii(convert(ulice using utf_8_to_iso_8859_2),'latin2') like 'vinohradska';

 ulice_id |    ulice    | mestska_cast_id |   latitude    |   longitude   
----------+-------------+-----------------+---------------+---------------
     5679 | vinohradská |              21 |  50.077638979 | 14.4511329906
     5680 | vinohradská |              20 | 50.0780777777 | 14.4609392857
     5681 | vinohradská |              16 | 50.0771697916 | 14.4856454861
(3 rows)
Pavel
Pavel (neregistrovaný)
6. 1. 2004 22:18 Nový

Re: Diakritika

celé vlákno

Jeste existuje programek/knihovna "unaccent", pokryvajici udajne cely unicode (no, cestina je v pohode, ale... co cizi "podivne" znaky, ktere jsou podivne i bez diakritiky? transliteraci na vsechno to bohuzel nema, ale clovek si muze doplnit unicodove tabulky pred kompilaci dle sveho, treba...).

Kdysi jsem to uspesne zkousel naimportovat do PgSQL, i kdyz to bylo jenom narychlo pres Perl, ale zato opravdu narychlo a bez velke prace a fungovalo to.

klo
klo (neregistrovaný)
10. 2. 2005 17:28 Nový

Re: Diakritika

celé vlákno
skvělý. postneš postup?
Shaman2nd
Shaman2nd (neregistrovaný)
5. 11. 2006 18:39 Nový

Re: Diakritika

celé vlákno
Jak rozjet unaccent v Postgres (8.1.3) za pouziti plperl:

Odtud stahnout unaccent a zkompilovat, popr. pouzit RPM. Ja osobne jsem mel pri kompilaci problemy, RPMko zafugovalo na prvni pokus.
http://www.senga.org/download/unac/

V Postgresu rozjet podporu plperl - vychazel jsem odtud: http://www.root.cz/clanky/kratce-o-plperl/. Tedy nejprve nainstalovat Perl (nutno prelozit a zaregistrovat libperl). Pote ze zdrojaku zkompilovat Postgres: nejprve nutno provest ./configure --with-perl, pak make && make install. Pokud byl jiz Postgres drive kompilovan a instalovan, staci provest cd src/pl/plperl a make && make install (staci tedy dokompilovat a doinstalovat jen plperl, netreba to provadet s celym postgresem).

Nyni se prihlaste k Postgresu jako superuser (ucet root ci neco podobneho) a provedte CREATE LANGUAGE plperl; a pro untrusted perl (sic nebezpecne, ale nutne pro zavolani unaccentu) CREATE LANGUAGE plperlu;

Ted uz staci vytvorit nejakou tu stored procedure, ktera nam bude v postgresu vracet pozadovany retezec bez diakritiky:
create or replace function f_unaccent_utf8 (varchar) returns varchar
as
$$
my ($s_in) = @_;
return `unaccent utf8 $s_in`; #misto utf8 lze samozrejme pouzit jine kodovani
$$ language plperlu;

A ted otestovat:
SELECT f_unaccent_utf8('ěščřžýáíéĚŠČŘŽÝÁÍÉ');

& ENJOY!
jahodak
jahodak (neregistrovaný) ---.net.upc.cz
27. 1. 2010 6:52 Nový

Re: Diakritika

celé vlákno

Díky, tohle mi pomohlo.

Llama
Llama (neregistrovaný)
6. 1. 2004 10:43 Nový

nejlepsi full-text pro tento rok?

celé vlákno

nejak jsem to ted neresil a koukam, ze co jsem povazoval za nejlepsi (http://www.aspseek.org/) nejak umrel.
Ma nekdo tip na nejaky *dobry* open source fulltext? Musi umet cestinu a unicode.

lzap
lzap (neregistrovaný)
6. 1. 2004 11:53 Nový

Re: nejlepsi full-text pro tento rok?

celé vlákno

Jakarta Lucene

ezop
ezop (neregistrovaný)
7. 1. 2004 13:45 Nový

Re: nejlepsi full-text pro tento rok?

celé vlákno

Lucene je jiz delsi dobu valcovana egotrem:

http://www.egothor.org/c124.html

Jerry
Jerry (neregistrovaný)
7. 1. 2004 18:59 Nový

Re: nejlepsi full-text pro tento rok?

celé vlákno

V tom případě doufám, že to časem taky někdo přepíše do .NETu, ať to můžu používat pod Monem ;-)
http://sourceforge.net/projects/lucenedotnet

Shaman2nd
Shaman2nd (neregistrovaný)
5. 11. 2006 18:53 Nový

Nastavení implicitní konverze

celé vlákno
Ucelem je zabranit nutnosti pouzivat ve fcich argumenty pro pouzitou konverzi (tedy 'default_czech') ci nutnosti provadet po restartu db ci na zacatku kazde session select set_curcfg('default_czech');. Pokud mate db nastavenou s ceskymi locales (tedy predevsim LC_CTYPE - zjistite treba pomoci SHOW ALL;), staci do sloupce LOCALE v tabulce PG_TS_CFG vlozit tu stejnou hodnotu, ktera je v LC_CTYPE (predpokladam tedy na radku where ts_name = 'default_czech'). Takto se bude vzdy pouzivat konverze default_czech.
Zasílat nově přidané příspěvky e-mailem