Autor Zpráva
Prkny
Profil
Dobrý den,

rád bych použil fulltextové vyhledávání na webu. Vyhledávání mi funguje dobře na text, ale nyní mám u zboží kódy ve tvaru 118-1 nebo 112-4 či CW224-17. Pro takové kódy to již dobře nefunguje.
Prosím o pomoc.

Můj kód:
SELECT id
FROM `zbozi` 
WHERE MATCH(kod,nazev_zb,klic_slova,product_name,nazev_hlaska,seo) AGAINST('" . mysqli_real_escape_string($mysqli_connect_db6, $hledane_slovo) . "*' IN BOOLEAN MODE) AND aktivni='1'
ORDER BY 2 * MATCH(nazev_zb) AGAINST ('" . mysqli_real_escape_string($mysqli_connect_db6, $hledane_slovo) . "*') + MATCH(kod,nazev_zb,klic_slova,product_name,nazev_hlaska,seo) AGAINST ('" . mysqli_real_escape_string($mysqli_connect_db6, $hledane_slovo) . "*') DESC, prodano DESC
LIMIT 20
Kajman
Profil
IN BOOLEAN MODE stejně nebude závratně rychlé, tak při detekci pomlčky (která se ve vyhledávacím řetězci používá k negaci) ve vyhledávání můžete místo toho hledat díky LIKE.
Prkny
Profil
To znamená, že fulltext v tomto případě pro čísla nelze využít? Nelze převést ten vyhledávací výraz z čísel na textový řetězec?

Problém LIKE v mém případě (pokud ho nepoužívám špatně) je ten, že hledané slovo "Míč modrý" nenajde zboží "modrý míč Gala". Fulltext ho najde. Fulltext lze srovnat dle relevantních výsledků.
Proto bych raději použil fulltext vyhledávání.

Třeba LIKE používám špatně, pokud ano, prosím o příklad lepšího použití. Můj příkaz LIKE:
SELECT id
FROM `zbozi`
WHERE ((nazev_zb LIKE '%" . $hledane_slovo . "%') OR (klic_slova LIKE '%" . $hledane_slovo  . "%') OR (kod LIKE '%" . $hledane_slovo  . "%') OR (nazev_hlaska LIKE '%" . $hledane_slovo  . "%')) 
ORDER BY nazev_zb
Kajman
Profil
Můžete mít dva druhy dotazů. Jeden pro klasická slova, tam použijete nynější řešení. Druhý dotaz s like, pokud se v hledaném textu objeví pomlčky a nejde tak použít fulltext.

Výraz si rozdělíte na jednotlivá slova a pak můžete ve verzi s like psát
(nazev_zb LIKE '%míč%' AND nazev_zb LIKE '%modrý%')
Pak nezáleží na pořadí.
Prkny
Profil
Výborný nápad, děkuji.

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:

0