Mapování Elastic dokumentů na Nextras ORM

Sitole
Člen | 39
+
0
-

Ahoj,
tohle téma se asi úplně netýká Nette, ale stavím ho na Nextras, které přeci jen příbuzné je.

Aktuálně experimentuji s mapováním dokumentů z Elasticsearch na Nextras ORM entity. Mám nějaké složité dotazy na skládání stránky a chtěl bych je mít v Elasticu, ale když už používám ORM, tak nechci k věcem z Elasticu přistupovat ohavně jako s polem. Nemám tam žádné složitosti. Entita v DB je 1:1 totožná s dokumentem.

Aktuálně experimentuji s něčím následujícím:

$sites[] = $elasticSite;
$collection = new ArrayCollection($sites, $this->sitesRepository);

$site = $collection->fetch();

Jistě to půjde udělat přehledněji, spíše jsem se chtěl zeptat, zda mám postupovat tímto směrem, či jsou pro Elastic nějaké knihovny, kde se tvoří jiné entity a já na to jdu špatně. Hledal jsem něco co se týče mapování resultu na entity v Elasticu, ale moc jsem nepochodil. Přeci jen bych chtěl mít aplikaci trošku striktní.

Jak tento problém řešíte?

fordo.pytlik
Člen | 26
+
+1
-

Ahoj @Sitole,

řeším asi úplně stejný problém. Mysql databáze je moje primární uložiště. Doménovou logiku mám v ORM (používám Doctrine2) a snažím se psát „striktní typový kód“. Elasticsearch používáme HODNĚ – téměř celá část pro zákazníky (výpis produktů, filtrování, vyhledávání i detail produktu) se načítá z elasticsearch. Dost podstatně jsme tím rychlost načítání (a vlastně ulehčili i databázi) atd. Celé by to bylo asi na delší povídání, ale (pokud vím), tak podobnou architekturu používá(/používal) i Mall.cz nebo Slevomat.cz…

Zvláštní je, že ve všech tutoriálech a příkladech k elasticsearch se normálně ukazuje, jak z Elasticsearch dostanu pole a to jen přádávám dál… Myšlenka, že by mi v aplikaci poletovali pole tam a zpátky se mi nelíbí (možná spíš hnusí).

Osobně jsem šel trochu jinou cestou vytvořil jsem si objekty typu DTO, abych tuhle část oddělil od entit. Je to jen hloupoučký objekt, který má property, které jsou mapované na pole z ES. Ano, je to víc psaní, ale dle mého názoru se to vyplatí.

Teď je otázka, jak:

  1. dostat mapping z DTO do Elasticsearch
  2. dostat data z databáze do ES
  3. dostat data z ES do DTO

Jak jsi postoupil? našel jsi nějaké řešení?