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í...:-(
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é...
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
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í?
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.
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). ?
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)
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.