Viděl jste někdy spellchecker, úplně tu nejprimitivnější implementaci?
Viděl. Dokonce evidentně narozdíl od Tebe jsem custom-made fulltext i implementoval, takže vím, že
a) fulltext index se spelcheckerem vlastně nijak nesouvisí, jsou to dvě úplně jiné technologie. To, že některé DB mají ve fultextových indexech zabudovaný jako preprocessing možnost stemmingu, aby ho aplikovali na data před tím, než data uloží do fulltext indexu, to nic nemění - do fulltextových indexů jdou ukládat (a i se ukládají) i nenastemmovaná data a naopak jde stemovat i něco, co neuložím do indexu.
b) spellchecker/stemmer samotný používá zpravidla hunspell algoritmus, kde sice má databázi slov, ale ve velmi speciálním tvaru (pomocí seznamu kořenů, prefixů a infixů) a jde o zcela jiné uložení dat, než je jak v B-Tree, tak ve fulltextových indexech - a s otázkou, jak něco ukládat a vyhledávat v relační databázi vůbec nesouvisí.
c) pro našeptávač je v tomto případě asi nejlepší varianta použít tzn. trigram indexy, které narozdíl od stemmingu ve fulltext indexech umí vyhledat i překlepy, to ovšem je úplně jiný typ indexu, než fulltextový index - a stejně jako fulltextový index nejde použít k akceleraci operace distinct.
d) stemming může pro jedno slovo vrátit více kořenů, takže zmiňovat ho v souvislosti s akcelerací DISTINCT operace je nesmysl.
V každém případě vyhledávání štítků pro účely našeptávání je zcela jiná úloha, než o které jsme se bavili. Kdo se tady furt vztekal, že nedodržujeme zadání? :-). My jsme se bavili o tom, jak udělat admin štítků, kde kupodivu seznam štítků potřebuji vidět i celý, např. pro to, aby ho mohl člověk jednou za čas zrevidovat a např. sloučit duplicity. Ono v reálu - pokud na to ten nástroj je - tak jde udržovat seznam štítků rozumně dlouhý a tedy revidovatelný. U této úlohy začala debata o indexu a na začátku to byl pro Vás snadný úkol, kde jste se mne snažil poučovat o indexech. Teď jsme se najednou dobrali do situace, kdy se zjistilo, že to opravdu neumíte rozumným způsobem udělat a tak to najednou není potřeba....