V rámci našich creative days máme jednou za čas možnost si „hrát“ s novými technologiemi a zkoumat nám zatím neprobádané oblasti. V rámci tohoto dne jsme se tentokrát zaměřili na vyhledávání v záznamech modulů našeho redakčního systému.
Do rukou jsme si vzali Elasticsearch - mocný to nástroj (nejen) na vyhledávání napříč vším možným i nemožným.
Hlavní motivací bylo pousnout vyhledávání v radakčním systému o krok dále. V RS máme momentálně nasazeno vyhledávání pouze v názvech jednotlivých modulů - tzn. uživatel je schopný rychle přejít např. z výpisu článků do výpisu katalogu produktů. Avšak velice často by se hodila možnost přecházet mezi konrétními záznamy - např. přejít přímo na editaci produktu dle jeho jména či kódu. A právě na vyhledávání záznamů v modulech jsme se rozhodli zkusit použít Elasticsearch.
Cíl byl jasný - vyhledávat v datech modulů (tabulek) tak, aby člověk snadno nalezl hledaný záznam napříč všemi moduly a jejich záznamy.
V PHP jsme si tedy napsali jednoduchý skript, který prošel všechny záznamy modulů a za pomocí Elasticsearch-PHP knihovny „nahrnul“ data do indexů - pro každý záznam jeho ID, title (název či nadpis), perex (typicky textový popis), jazyk záznamu a název rodičovského modulu.
Když už jsme měli k dispozici zaindexovaná data, již stačilo jen dopsat jednoduchou obslužnou logiku, která prohledá daný index v aktuální jazykové mutaci a vyhledá záznamy odpovídající hledané frázi. V konečné fázi by se tyto výsledky vyhledávání zobrazovaly pod vyhledávacím polem jako odkazy vedoucí na editaci/náhled záznamu.
Při experimentování jsme narazili na několik poznatků a samozřejmě také nemálo problémů:
Abychom mohli navrhované řešení nasadit do produkce, je potřeba vyřešit především lepší granularitu indexování/analýzy vstupnách dat (sémantika dat může být modul od modulu jiná) a také způsob vyhledávání (protože ES nabízí opravdu velké množství způsobů jak data vyhledávat).
Creative day potvrdil, že Elasticsearch je pro nás perspektivní technologie a jsme schopní v případě potřeby toto řešení nasadit do produkce.