Autor | Zpráva | ||
---|---|---|---|
janbarasek Profil |
#1 · Zasláno: 18. 6. 2014, 20:23:12
Ahoj,
pracuji na jednom obsahovém webu, kde jsou videa o matematice a snažím se je nějak chytře prohledávat. Metody třídění dat mám už celkem vyřešené, napsal jsem si na to vlastní algoritmus, co třídí surové výsledky do "relavantnější" podoby. Problém je však v tom, že se databáze na výsledky ptám ve stylu: SELECT * WHERE 'nejaky_sloupec' LIKE '%dotaz%' až do současnosti toto řešení stačilo, nicméně jsem narazil na několik problémů. Ten největší je v tom, že to hledá jen na přesné řetězce, které se v databázi vyskytují (přesnou shodu) a není to tolerantní vůči přehození slov. Například mám v databázi uloženo ve sloupečku "stitky" následující text: graf,funkce,kvadratická,střední škola Pokud ale někdo vyhledá dotaz "kvadratická funkce", tak to rozhodně neodpovídá přesné shodě s tabulkou. Možným řešením je uložení přesně těchto kombinací, ale to jsem rovnou zavrhl - zejména pro jejich počet. Také mě napadlo dotaz rozsekat po slovech, které se vyhledávají individuálně, tím získám několik množin výsledků a pak udělám jednoduchý binární průnik a zbylé výsledky se seřadí podle globálního ranku a vypíší. Otázka ale zní: Dá se to udělat nějak lépe? Ideálně rovnou na úrovni databáze? Znalosti na naprogramování vlastního řešení mám, ale zabralo by to hodně času a nebylo by to optimalizované, protože bych prohledával opakovaně více různých řetězců. Děkuji. |
||
Taps Profil |
#2 · Zasláno: 18. 6. 2014, 20:34:35
janbarasek:
zkoušel jsi find_in_set ? viz http://dev.mysql.com/doc/refman/5.0/en/string-functions.html#function_find-in-set |
||
Časová prodleva: 11 let
|
0