Dobrý den,
zajímalo by mě jak nastavit fulltext (vyhledávací dotaz), aby našeptávač vyhledávání ukazoval vyhledávání od začátku slov.
Díky za postřehy
Dobrý den,
zajímalo by mě jak nastavit fulltext (vyhledávací dotaz), aby našeptávač vyhledávání ukazoval vyhledávání od začátku slov.
Díky za postřehy
Naposledy upravil fida8 : 25.11.2011 v 11:44
To je jednoduché, mají tam AJAX co po každém zadání písmenka zavolá nový dotaz na DB a ten vypadá odhadem nějak takhle:
Kód:SELECT vyhledavanaslova FROM tabulka WHERE vyhledavanaslova LIKE 'zadanoveformulari%'
Právě jsem se chtěl vyhnout LIKE kvůli rychlosti a proto že vyhledávání je celkem zatěžované. Mohlo by to jít i nějak takhle ve fulltext? (MATCH, AGAINST)
teoreticky by to slo delat pomoci Lucene, ale jeste sem to nezkousel
Pokud u LIKE používáš zápis "vyraz%", hledají se tedy pouze řetězce začínající tím výrazem, použije se u MySQL index. Právě protože je to podle řetězce, takže vyhledávání by mělo mít složitost log(n)*delkaRetezce v nejhorším případě. Problém potom vzniká při přepočítávání indexu, který je náročný. Takže bych doporučil nově hledané výrazy ukládat do pomocné tabulky a přepočítávat třeba jednou denně v noci.
Samozřejmě to jde udělat lépe, tohle byl jen takový jednoduchý nástřel, rychlejší bude třeba:
Ono záleží, pokud bude LIKE použitý nad řádově tisíci až desítkami tisíci záznamy je to skoro jedno. Od stovek tisíců a milionů záznamů, už LIKE není vhodný a rozdíl rychlosti se začne projevovat. Pak se může začít brát v úvahu i předpočítávání indexu jak psal zaruba, nebo další optimalizační techniky.Kód:SELECT vyhledavanaslova FROM tabulka WHERE LEFT(vyhledavanaslova, LEN('zadanoveformulari')) = 'zadanoveformulari'
Nejsem si jistý u MySQL, na MSSQL to bude určite rychlejší. DB engine pro LIKE používá jiný algoritmus než pro = i při porovnávání stringu. Rozdíl do pár desítek tisíc nebude znát, nad pár stovek tisíc už by tam rozdíl je.