Autor Zpráva
janbarasek
Profil
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
janbarasek:
zkoušel jsi find_in_set ? viz http://dev.mysql.com/doc/refman/5.0/en/string-functions.html#function_find-in-set

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: