Jestli je to výhodnější nezjistíte tak, že vypíšete výhody a zatajíte nevýhody.
Nevýhody - nutnost projití dalším, mělkým a paměťově řádově méně náročným indexem, nijak nezatajuji. Jen tvrdím, že pro celkový výkon DB to není tak velká nevýhoda, jako jí zaplácnout stovky MB paměti větším indexem. Vidíš tam ještě jiné nevýhody?
Já jsem štítky neuváděl jako argument pro vhodnost či nevhodnost nějakého postupu.
Jo, takže jsme se bavili o vhodnosti DB struktury, ty jsi přišel se štítkama, ale nebyla to ukázka toho, kdy je podle Tebe nějaká struktura vhodná. Aha.....
V první větě rozporujete, že spellchecker není kontrola správnosti,
Ano, přepsal jsem se. Myslím, že alespoň trochu inteligentní člověk z toho je schopen pochopit, co jsem chtěl napsat: že spellchecking není návrh správnosti, ale kontrola. Tak nevím.... nepochopil jste to? Anebo vaším cílem není diskutovat, ale něco jiného, a nepochopil jste to naschvál?
Problém je totiž v tom, že neustále vyvracíte věci, které jsem nenapsal.
Ne, problém je, že každou chvíli tvrdíte něco jiného, podle toho, co se zrovna povede vyvrátit tak, že už nemáte žaludek na tom dál trvat.Např. na začátku jste tvrdil, že
"To je prostě množina slov, ve které se dá rychle vyhledat, jestli v ní dané slovo je nebo není..."
chvíli poté
"Spellchecker má za úkol na základě vstupu najít možná podobná slova ze slovníku existujících slov."
a teď zas tvrdíte, že jste to netvrdil a že spellchecker je kontrola správnosti, takže první definice.
Další nesmysl. A to vám není hloupé odkazovat na neexistující stránku? To jste si myslel, že si toho nevšimnu?
Podle sebe soudím Tebe? Víš, normální člověk nediskutuje proto, aby z druhého dělal vola, a takovéto metody nepoužívá.Zkus to prosím také, diskuse začne být o mnoho kvalitnější. Odkaz se nějak pomrvil, správný odkaz je tady:
https://cs.wikipedia.org/wiki/Form%C3%A1ln%C3%AD_gramatikaNavíc nemůžu za to, že znáte jenom jedinou metodu implementace spellcheckeru, u které navíc ani nevíte, jak funguje.
Ne, znám standardní implementaci spellcheckru, která je použita v největších SW balících (libreoffice, mozilla, chrome). A vím, že alternativní spellcheckery (ispell, aspell, myspell, snowball) používají stejný princip. Takže prostě pokud mluvíte o spellcheckru a myslíte tím jiný přístup než generativní gramatiku, tak evidentně mluvíte o něčem, co vůbec neznáte.
A co se týče toho, kdo neví, jak spellchecker funguje, tak já nemluvil o spellcheckru jako o indexu....
Ano, ale je dobré na to myslet už při návrhu algoritmu samotného spellcheckeru.
Ano, je dobré myslet při návrhu auta na světla. Ale když někdo mluví o tom, na jakém principu jezdí auto, tak nemyslí světlo.
Jinak byste také mohl navrhnout hash index, ve kterém budete zjišťovat existenci slov,
No, a budete asi překvapen, ale zrovna majoritní implementace: hunspell - alespoň prokazatelně v OS software - na to prostě moc nemyslela a datovou strukturu na to připravenou prostě nemá. A vzhledem k tomu, že je to majoritní spellchecker, tak pochybuji, že jsou na tom ostatní o tolik lépe, některé určitě ne, možná o trochu líp Aspell se svojí implementací soundslikes, ale on to je z principu u hodně ohýbaných jazyků těžko řešitelný problém.
O tom vašem „původním problému“ už jsme si vysvětlili, že je to velmi raritní případ, tudíž je to nesmyslná argumentace.
Zaprve to sis vysvětlil možná tak sám sobě. Zadruhé jsi původně tvrdil, že to umíš a vysmíval ses ostatním, že to neumí.
Dobře, beru toto jako přiznání, že to neumíš. Že by ses omluvil od Tebe čekat asi nemohu.
Zjistěte si, co je to našeptávač. Našeptávač na dotaz „nov“ nabídne „novinky“.
Tak proč jste do toho celou dobu tahal cituji: "možná podobná slova ze slovníku existujících slov."? Najednou, když jste zjistil, že ani to neumíte, tak to také není potřeba? Dobrý našeptávač si poradí i s překlepy.
Běžně se používají i víceslovné štítky.
Zaprve o tom běžně bych pochyboval (ale to těžko dokážeme), zadruhé pokud už se používají, tak jejich text má význam jako celek, čili i tam nemá fulltext (který indexuje jednotlivá slova) zpravidla smysl.
Navíc jste chtěl řešení ve standardním Postgresu, předpokládal jsem tedy PostgreSQL bez extenzí. Tak se předveďte, jak v PostgreSQL bez extenzí vytvoříte trigram index.
pg_trgm je součástí distribuce postgresu, ač implementována jako modul. To je jako byste tvrdil, že do unixového jádra nepatří moduly a že se má člověk obejít bez nich.
Kde v mém dotazu se provádí unique?
Aha, vy to unique vlastně ani neprovádíte. Takže pokud ten dotaz poběží nad tou strukturou, kterou tu celou dobu prosazujete, tak vám to našeptá jeden stejný výraz tisíckrát. Tak to se omlouvám, to, že napíšeš dotaz vracející jiný výsledek než chceme jsem nečekal a myslel jsem, že máš na mysli dotaz s distinctem.
Že na to ještě ovšem upozorníš, jako by to byla přednost Tvého dotazu, nějak nechápu. Takže Tě prosím znovu, ukaž dotaz, který umí efektivně vrátit z Tebou prosazované datové struktury unikátní našeptávací návrhy. A klidně pomocí GIN indexu, pomineme, že dobrý spellchecker nabízí i korekce.
Jen Tě upozorňuji, abychom si ušetřili další kola Tvých marných pokusů, že Tvoje víra v schopnosti GIN indexu je mylná, protože kupodivu GIN neindexuje text jako celek, ale jednotlivá slova, takže to ani z principu nemůže umět. Fulltext index by mohl (kdyby byla taková funkcionalita zpřístupněna) efektivně vypsat unikátní použitá slova ve štítcích, nikoli unikátní štítky.
Obecně jiných typů indexů se to netýká, sám jste už vyjmenoval typy indexů, které to zvládnou v pohodě, jsou dokonce s tím záměrem vytvořené.
Právě jste překonal další metu: ve svém postu jsem Vám demonstroval, že to GIN index neumí, a vy na to bez jakéhokoli důkazu napíště, že to umí. Anebo jste myslel jiný index? Který konkrétně?
Ten příklad, který jste uvedl, totiž závisí na mnoha faktorech, které jste neuvedl. Jedním je konkrétní implementace B-Tree.....
Ano, a to co vám celou dobu tvrdíme je, že v databázích JSOU ty KONKRÉTNÍ IMPLEMENTACE TAKOVÉ, ŽE TO zpravidla PROSTĚ NEUMÍ, A TEDY JE VAŠE ŘEŠENÍ PRO PŘÍPAD SQL DATABÁZÍ ANTIPATTERN. Že možná vyškrábnete databázi X s indexem Y, která to jako výjimka umět bude, na té antipatternovosti nic nemění.
Celý problém naší debaty je v tom, že neznáte, jak věci implementované JSOU. A jen teoreticky přemýšlíte, jak by věci implementované být MOHLY. A když Vám ukazujeme, že se mýlíte, tak to neumíte přiznat. A nejste schopen připustit, že ač by index v databázi mohl být implementován tak, že by akcelerovat DISTINCT, že tak prostě v drtivé většině prostě NENÍ.
Úplně stejný problém je s tím spellcheckingem: myslel jste si, že je implementován jako index a samozřejmě, že by tak být implementován mohl. Ovšem prostě v majoritních spellchekrech tak implementován NENÍ. Běžné formáty slovníků pro spellchecking nedávají seznam slov výčtem, ale gramatikou.