Portál AbcLinuxu, 4. května 2025 12:38
Aktuálně jsem postaven před problém, jak vytvořit relativně kvalitní fulltextové vyhledávání na vlastním webu. Pravdou je, že existuje řada služeb online, které fulltext na web umí přidat. Mezi možné kandidáty patří Google který mě osobně nevyhovuje, neboť prvním výsledkem ve vyhledávání je vždy placená reklama. Ačkoliv postoj google chápu, tak je to nejlepší způsob, jak poslat návštěvníka ke konkurenci.
Druhá, hodně doporučovaná možnost je Atomz který po cca 2 měsících zkoušení nefunguje tak, jak bych chtěl. Ačkoliv jsem v nastavení na atomz zvolil indexovat 1x týně, tak po měsíci jsem zistil, že stejně nic neindexuje. Jediná šance je se na atomz hlásit a vždy obnovovat index. Bohužel, toto je problém. Často zadám do Atomzu hledat něco, co na webu mám ale Atomz to nenajde. Bohužel takovéhle vyhledávání mi hodně nevyhovuje.
Mrkněte sami, jak to s Atomzem vlastně vypadá
Tento zápisek má v podstatě posloužit k rozvíření diskuze an téma vlastního fulltextu. Na webu mám inplementovaný http://www.taboreni.cz/sitemap.xml a z něj bych asi nejraději vycházel. Asi bych dle sitemaps celý web třeba 1x za 24 hodin grabnum wgetem a nějak "zpracoval" obsah a uložil do databáze. Pak bych měl tabulku v DB která by vždy obsahovala html titulek, H nadpisy, textový obsah a URL... a teď je jen otázka, jak postavit vyhledávací script.
Chtěl bych, aby hledání probíhalo fultextově, nezáleželo na diakritice (ATOMZ diakritiku neumí a tak vyhledává špatně), rád bych aby se upřednostnil titulek, pak nadpisy Hx a nakonec obsah webu.
Nemáte nějaké nápady a zkušenosti?
Tiskni
Sdílej:
SELECT * FROM articles WHERE title LIKE %neco% AND content LIKE %neco%;
<strong>
, <em>
, vnitřku nadpisů a toho, co se vkládalo do klíčových slov v hlavičce.
Zákazník chtěl ještě podporu skoňování a časování, ale protože se mi nepovedlo najít volně dostupná data, tak se to nakonec neřešilo. Stejně dodnes nevím, jak to elegantně řešit, návrh byl pro každé slovo, které se najde v "sloňovací/časovací" tabulce, provést dotazy na všechny další slova se stejným identifikátorem. V praxi to mohlo znamenat zhruba zdeseti-zdvacetinásobení dotazů, protože se počítalo i zahrnutí nespisovných tvarů (typu "myšmi/myšma/myšima/myšema/myšmami/myšmama"). Docela by mně zajímalo, jak tohle řeší hoši v Seznamu Stejně dodnes nevím, jak to elegantně řešit, návrh byl pro každé slovo, které se najde v "sloňovací/časovací" tabulce, provést dotazy na všechny další slova se stejným identifikátorem. V praxi to mohlo znamenat zhruba zdeseti-zdvacetinásobení dotazůProto se to řeší tak, že se do indexu ukládají pouze slova v základním tvaru a dotazy se převádějí opět na základní tvar (pokud např. nejsou v uvozovkách).
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.