Databáze > Obecné

vyhladavanie s/bez diakritiky v SQL

(1/6) > >>

martinnr:
Ako riešite v SQL databáze vyhľadávanie slov s diakritikou? Typicky je to napríklad vyhľadávanie v tabuľke firiem (názov).
našiel som nejaké deklarácie funkcií pre odstránenie diakritiky, ale to je možno dosť pomalé.
pomohlo by vytvoriť si nejakú podružnú tabuľku výskytu slov, alebo pridať pole s duplicitným názvom ale odstránenou diakritikou? (plný názov "Konštrukčné prvky, s. r. o." a k tomu podružné pole upraveným s textom "konstrukcne prvky sro" a potom so užívateľom zadaného reťazca odstrániť diakritiku a hladať cez LIKE v tom druhom poli? užívateľ môže zadať napr. "prvky kon s.r.o." a malo by to nájisť ten záznam).
záleží na počte záznamov v tabuľke? riešime to aj pre tabuľku s pár tisíc záznamami, ale aj onú tabuľku s viac ako 100k záznamami.

máte s týmto niekto praktické skúsenosti?

vandrovnik:
Pro vyhledávání přidávám pomocné pole, kde je údaj bez diakritiky a velkými písmeny. V mém případě je to pole i indexované, protože u nás se mnohem častěji hledá podle počátku (STARTING WITH) než obsah kdekoli uvnitř (CONTAINING).

Snažím se nepoužívat LIKE, protože do hledaného textu pak musím přidat další znaky (%), jenže to dělá neplechu v případě, že pole je třeba varchar(10), v dotazu by bylo něco jako Pole LIKE :Pole a do parametru bych pak zadal %123456789% - parametr má rázem 11 znaků, přičemž přípustných je 10. Když použiju CONTAINING, stačí do parametru zapsat 123456789.

Jan Fiala:
Pro určité číselníky taky přidáváme další pole, kde jsou agregované údaje z dalších polí bez diakritiky. např. pro adresář pole obsahuje komplet adresu (jméno + ulice + místo). Pro hledání používáme like, kde pak hledáš jakoukoliv část.
Bez existence "%" se dělá like automaticky, jakmile hledaný řetězec obsahuje "%", necháváme to na uživateli - kombinace jako: %novak%brno%

František:
takze ako potom riesite vyhladavanie vyskytu v celom  varchar(4000), ci to rozsekat na jednotlive slova?

pf1957:

--- Citace: František  30-11-2022, 18:11:06 ---takze ako potom riesite vyhladavanie vyskytu v celom  varchar(4000), ci to rozsekat na jednotlive slova?

--- Konce citace ---
Jestli chces full text search, tak to se resi pres inverted index, ale posledni free implementace, kterou jsem pred lety videl, byla v Jave.

Navigace

[0] Seznam témat

[#] Další strana

Přejít na plnou verzi