Bližší seznámení s elasticsearch

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
karelmuska
Člen | 6
+
0
-

Dobrý den,

připravuji webový projekt, psaný v Nette, u kterého bude vyhledávání stěžejní funkcí. Předpokládaná velikost databáze bude činit +3mil. záznamů. Pro vyhledávání jsem se rozhodl využít elasticsearch (indexovat budu pouze titulky a vlastnosti). Po přečtení několika článků a shlédnutí několika videí začínám problematiku chápat, několik věcí mi však stále není jasné…

  • Na serveru jsem nainstaloval javu a elasticsearch, kam přesně mám umístit český slovník?
  • Je nutné zabezpečit přístup k portu z venčí?
  • Kde se fyzicky nachází data? Jak by probíhala případná migrace na jiný server?
  • Existuje pro elastic nějaká správa jako PHPmyAdmin pro mysql?
  • Při používání elastic jsou kompletní data uložena stále v RAM?
  • Jde nastavit automatická indexace nových/změněných dat v mysql (nebo se musí cronem spouštět script který se o to postará)?
  • Nějaká další úskalí, na co si dát pozor?

Za rady budu vděčný,
Díky.

Marek Šneberger
Člen | 130
+
+4
-

Na serveru jsem nainstaloval javu a elasticsearch, kam přesně mám umístit český slovník?

Na Linuxu /etc/elasticsearch/hunspell/cs_CZ/cs.aff a cs.dic.

Je nutné zabezpečit přístup k portu z venčí?

Samozřejmě, jinak ti kdokoli jedním requestem smaže celej index.

Kde se fyzicky nachází data? Jak by probíhala případná migrace na jiný server?

/var/lib/elasticsearch/data/NázevClusteru. Kopírování bych neřešil. Do Clusteru bych zapojil další Node, Elastic by se sám postaral o „zkopírování“ dat na nový node a starý node bych odříznul.

Existuje pro elastic nějaká správa jako PHPmyAdmin pro mysql?

Ano a ne. Jeden zabugovaný plugin je v Admineru. Já osobně si vystačím s HQ pluginem, nepotřebuji procházet data která jsou v Elasticu uložená. Na různé grafíky jsou super pluginy Marvel a Kibana, tuším že jsou přímo od Elasticu.

Při používání elastic jsou kompletní data uložena stále v RAM?

Ne, data jsou uložená v Shardech, což je obálka přímo nad Lucene indexem.

Jde nastavit automatická indexace nových/změněných dat v mysql (nebo se musí cronem spouštět script který se o to postará)?

Ano lze to, pogůgluj si Elastic river, ale moc to nedoporučuju. Lepší je si napsat command, máš nad tím lepší kontrolu. Co se týče editace, není nic jednoduššího než si na entitu navěsit event, přes který po editaci data pošleš do Elasticu (pokud používáš Doktrínu).

Nějaká další úskalí, na co si dát pozor?

Doporučuju si návrh Elasticu dobře promyslet. Hlavně mapování. Plus promyslet jak budeš reindexovat data, když změníš mapování? Já to řeším přes scroll api v Elasticu, a pak jen přehodím aliasy.

Doporučuju přečíst článek ElasticSearch: Nepleťme si pojmy s dojmy plus jsem napsal aplikaci v Nette, která používá Elastic. Dá se z toho celkem dost okoukat :-) Dal by si někdo toast? Aneb hledáme hlášky z Červeného Trpaslíka

Editoval Marek Šneberger (25. 9. 2015 13:10)

Azathoth
Člen | 495
+
0
-

tady je videozáznam s workshopu s elastic searchem a tady je sandbox, na kterém se to na tom workshopu dělalo

Editoval Azathoth (25. 9. 2015 13:31)