Dobrý den,
toto řešení je asi nejefektivnější, ale má jednu velikou nevýhodou a tou je neflexibilita. Pokud taková databáze poroste a vy se rozhodnete časem změnit například oddělovaní takto upravených "fulltextových" dat, tak můžete narazit na dost veliké potíže. Z tohoto důvodu jsem například v jedné naši aplikaci od tohoto sloupce upustil a radši zapojil Apache Lucene engine, do kterého existuje (nebo si lehce vytvoříte) češtinu bez diakritky a lowercase, stejně jako spousta jiných jazyků. Tento engine vám potom na dotaz velice rychle vrátí id objektů, které mají být ve výsledku. Tyto objekty pak můžete rovnou načítat z DB. Výhoda je, že DB obsahuje jenom skutečně relevantní data a přeindexování lucene trvá chvíli. Další výhodou je flexibilita ve vyhledávání v řetězcích pomocí tohoto engine, která vysoce převyšuje běžné možnosti SQL serverů (nemyslím tím Oracle s Fulltext supportem). Nevýhoda je zesložitění aplikace a nutnost pochopit Lucene, což pár dní trvá, ale zvládnout se to dá...

S pozdravem

Lukáš Záruba (Lukas Zaruba)

On 29.8.2010 18:05, Lukas Barton wrote:
To ale bude desne pomale, nebot se nepouzije index.
Rozumnejsi je pridat sloupec, kde aplikace predpocita hodnotu
bezdiakritiky (lowercase,...) a stejne tak upravit vyhledavaci
retezec.

Dalsi moznost je pouzit k hledani v textu neco jineho nez DB...

   Lukas

On 8/29/10, Ondra Medek<xmed...@gmail.com>  wrote:
No asi bych zkusil vytvorit DB ulozenou proceduru, ktera vrati retezec
bez diakritiky, napr. bezd(), pak v SQL by to bylo neco jako:
WHERE lower(bezd(alias)) like lower(...)
a toho lze pak docilit pres sqlRestriction, pripadne
SQLAliasedCriterion
http://opensource.atlassian.com/projects/hibernate/browse/HHH-2952

2010/8/29 danisevsky<danisev...@gmail.com>:
Zdravím, používám hibernate a postgresql a potřeboval bych pořešit
následující věc. Vyzvednutí všech uživatelů, kteří mají v políčku
alias něco, co obsahuje "Žluťoučký" nebo "žluťoučký":

Criteria crit = session.createCriteria(Person.class);
crit.add(Restrictions.ilike('alias', 'žluťoučký',
MatchMode.ANYWHERE).ignoreCase();
List results = crit.list();

jak nejlépe docílit, aby do výsledku dotazu zahrnul i políčka
obsahující "Zlutoučký" nebo např "zlutoucky" - tedy částečně nebo
zcela bez diakritiky?

Předem díky za jakoukoliv radu.



--
Ondra Medek

Odpovedet emailem