Successfully reported this slideshow.
Your SlideShare is downloading. ×

Elasticsearch a quick introduction

Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Loading in …3
×

Check these out next

1 of 73 Ad

Elasticsearch a quick introduction

Download to read offline

This talk is a brief introduction to Elasticsearch. What is it ? How can I use it ? How can it be useful for my company or for my business ? (the slides are in ITALIAN)

This talk is a brief introduction to Elasticsearch. What is it ? How can I use it ? How can it be useful for my company or for my business ? (the slides are in ITALIAN)

Advertisement
Advertisement

More Related Content

Similar to Elasticsearch a quick introduction (20)

Advertisement

Recently uploaded (20)

Elasticsearch a quick introduction

  1. 1. Elasticsearch federico.panini@fazland.com - CTO Federico Panini CTO @ fazland.com email : federico.panini@fazland.com linkeIn : https://uk.linkedin.com/in/federicopanini slides : http://www.slideshare.net/FedericoPanini
  2. 2. Cos’è Elasticsearch ? federico.panini@fazland.com - CTO motore di ricerca full text “Un motore di ricerca (in inglese search engine) è un sistema automatico che, su richiesta, analizza un insieme di dati (spesso da esso stesso raccolti) e restituisce un indice dei contenuti disponibili classificandoli in modo automatico in base a formule statistico-matematiche che ne indichino il grado di rilevanza data una determinata chiave di ricerca”.
  3. 3. Cos’è Elasticsearch ? federico.panini@fazland.com - CTO motore di ricerca full text
  4. 4. Cos’è Elasticsearch ? federico.panini@fazland.com - CTO motore di ricerca full text “It’s a distributed, scalable, and highly available Real-time search and analytics software.”
  5. 5. Cos’è Elasticsearch ? federico.panini@fazland.com - CTO caratteristiche Dati disponibili real-time Analisi dei dati real-time Ambiente distribuito Alta disponibilità Ricerche full-text Document oriented DB Schemaless DB RESTFul Api Persistenza per-operazione Open Source Costruito su Apache Lucene Optimistic version control
  6. 6. Apache Lucene #1 federico.panini@fazland.com - CTO E’ il cuore pulsante di Elasticsearch Lucene è il motore di ricerca di Elasticsearch
  7. 7. Apache Lucene #1 federico.panini@fazland.com - CTO E’ scritto in Java E’ un prodotto Apache foundation quindi open source
  8. 8. Elastic cosa ha in più di Lucene? federico.panini@fazland.com - CTO ricerche full text horizontal scaling high availability Semplicità d’uso near real time
  9. 9. Architettura federico.panini@fazland.com - CTO requirements - CPU Per sua natura elasticsearch non necessita di molte capacità “computazionali”. In generale l’utilizzo della CPU è molto limitato. E’ consigliato utilizzare un modello di CPU di ultima generazione con più di un core. In genere installazioni standard di ES utilizzano dai 2 agli 8 cores.
  10. 10. Architettura federico.panini@fazland.com - CTO requirements - Disco L’utilizzo del disco è importante per tutte le tipologie di cluster, nel nostro caso è fondamentale. E’ consigliato utilizzare dischi SSD.
  11. 11. Architettura federico.panini@fazland.com - CTO requirements - Disco - bonus slide … Unico punto di attenzione è sullo scheduler in uso dal sistema operativo. Lo scheduler è lo strumento che i sistemi operativi *nix utilizzano per decidere quando i dati devono essere inviati al disco e con quale tipo di priorità. Normalmente le installazioni di unix utilizzano cfq, che è uno scheduler ottimizzato per i dischi classici a “piatti rotanti”. Se si implementano dischi SSD è consigliato utilizzare “noop” o “deadline”, scheduler ottimizzati per questa tipologia di hard disk. Si riescono a raggiungere miglioramenti nelle prestazioni di 500x rispetto ad una errata configurazione del Sistema operativo.
  12. 12. Architettura federico.panini@fazland.com - CTO Sistema Operativo Non ci sono particolari vincoli sul sistema operativo in quanto ES è sviluppato in Java, quindi potenzialmente multipiattaforma. Il consiglio è di utilizzare l’ultima versione disponibile della JDK.
  13. 13. Architettura federico.panini@fazland.com - CTO requirements - RAM Elasticsearch è un divoratore di RAM !!! https://www.elastic.co/guide/en/elasticsearch/guide/current/ heap-sizing.html
  14. 14. Architettura federico.panini@fazland.com - CTO memory !?!? max 64GB di ram max 32GB per Java consigliato l’uso in parallelo di macchine, configurate
 in cluster.
  15. 15. Architettura federico.panini@fazland.com - CTO installazione curl -L -O http://download.elasticsearch.org/PATH/TO/ VERSION.zip unzip elasticsearch-$VERSION.zip cd elasticsearch-$VERSION sono disponibili distribuzioni Debian o RPM packages oltre a moduli chef e puppet.
  16. 16. Java based federico.panini@fazland.com - CTO elastic questo sconosciuto Elasticsearch è sviluppato in Java Robusto Scalabile Multipiattaforma
  17. 17. Comunicare con Elastic federico.panini@fazland.com - CTO clients Java #1 Per Java sono disponibili 2 client: Node client: con questo tipo di approccio il client fa una join al cluster come “nodo non contenente dati”, il nodo in se non ha dati ma sa perfettamente su quale nodo del cluster si trovano i dati che sta cercando
  18. 18. Comunicare con Elastic federico.panini@fazland.com - CTO clients Java #2 Per Java sono disponibili 2 client: Transport client : è molto più “snello” del precedente ed è lo strumento utilizzato per comunicare con cluster in remoto.
  19. 19. Comunicare con Elastic federico.panini@fazland.com - CTO clients Java #2 Per Java sono disponibili 2 client: Tutti e due i tipi di client comunicano con il cluster sulla porta 9300, che tra l’altro la stessa porta con la quale comunicano i nodi stessi del cluster.
  20. 20. Comunicare con Elastic federico.panini@fazland.com - CTO client API RESTful Tutti gli altri linguaggi possono comunicare con Elasticsearch utilizzando le API Rest disponibili sulla porta 9200. Esistono client ufficiale per questi linguaggi : Groovy, JavaScript, .NET, PHP, Perl, Python, e Ruby
  21. 21. Elastic federico.panini@fazland.com - CTO Document oriented NoSql Elasticsearch è un database document oriented. Questo significa che i dati inseriti non sono “costretti” a nessun tipo di forma tabellare ma è possibile inserire oggetti o meglio documenti direttamente. A seguito dell’inserimento, Elasticsearch provvede anche ad indicizzare i dati appena inseriti.
  22. 22. Elastic federico.panini@fazland.com - CTO Document oriented JSON E l a s t i c s e a rc h s t e r i l i z z a i documenti inseriti tramite l’utilizzo di JSON.
  23. 23. Elastic federico.panini@fazland.com - CTO glossario cluster nodes indexes shards replica segments in-memory buffers translog
  24. 24. Elastic federico.panini@fazland.com - CTO cluster Un cluster è un insieme a cui appartiene uno o più nodi, che condividono la stessa proprietà cluster.name. Il cluster server per bilanciare il carico delle richieste che provengono ad Elasticsearch. Un nodo può essere eliminato o aggiunto al cluster, questo sarà responsabile di riorganizzarsi.
  25. 25. Elastic federico.panini@fazland.com - CTO cluster All’interno del cluster un nodo è eletto come Master. Questo nodo è responsabile di gestire operazioni sugli indici come la loro creazione o eliminazione, aggiungere o rimuovere un nodo dal cluster. Ogni nodo può essere Master.
  26. 26. Elastic federico.panini@fazland.com - CTO nodes E’ l’elemento minimo che garantisce il funzionamento dell’istanza di Elasticsearch.
  27. 27. Elastic federico.panini@fazland.com - CTO Index Database RDBMS Elasticsearch DATABASE INDEX
  28. 28. Elastic federico.panini@fazland.com - CTO Type Database RDBMS Elasticsearch TABELLA TYPE
  29. 29. Elastic federico.panini@fazland.com - CTO Document Database RDBMS Elasticsearch ROW DOCUMENT
  30. 30. Elastic federico.panini@fazland.com - CTO Fields Database RDBMS Elasticsearch COLUMNS FIELDS
  31. 31. Elastic federico.panini@fazland.com - CTO shards Se vogliamo iniziare a salvare dati su Elasticsearch è necessario creare un indice. Il termine Indice è solamente una definizione logica e rappresenta un puntatore ad uno o più elementi definiti SHARDS.
  32. 32. Elastic federico.panini@fazland.com - CTO shards Lo shard è considerato un elemento di basso livello nell’infrastruttura di ES. Lo shard contiene un subset di tutti i dati contenuti nell’indice. Lo shard, fisicamente rappresenta una singola istanza di Apache Lucene.
  33. 33. Elastic federico.panini@fazland.com - CTO Replica shards Gli shards di tipo replica sono delle copie esatte degli shards utilizzate per proteggere i nostri dati da errori hardware. Allo stesso modo degli shards “servono” richieste e ricerche sugli indici.
  34. 34. Elastic federico.panini@fazland.com - CTO shards immutability IL numero di shards è prestabilito all’atto della creazione dell’indice ed è IMMUTABILE.
  35. 35. Elastic federico.panini@fazland.com - CTO shards immutability curl -X http://localhost:9200/blogs -d ‘{ "settings" : { "number_of_shards" : 3, "number_of_replicas" : 1 } }’
  36. 36. Elastic federico.panini@fazland.com - CTO shards immutability curl http://localhost:9200/_cluster/health“{ "cluster_name": "elasticsearch", "status": "yellow", "timed_out": false, "number_of_nodes": 1, "number_of_data_nodes": 1, "active_primary_shards": 3, "active_shards": 3, "relocating_shards": 0, "initializing_shards": 0, "unassigned_shards": 3 }”
  37. 37. Elastic federico.panini@fazland.com - CTO shards immutability Shards di tipo replica sullo stesso nodo sono assolutamente inutili… perde di ogni significato il concetto di ridondanza per il quale sono stati creati. E’ necessario eseguire un nuovo nodo. In automatico il cluster si renderà responsabile di creare 3 replica shards per il nostro indice.
  38. 38. Elastic federico.panini@fazland.com - CTO BONUS : gestione dei conflitti #1
  39. 39. Elastic federico.panini@fazland.com - CTO BONUS : gestione dei conflitti #2 : Pessimistic Concurrency Control Gestito ed utilizzato normalmente nei RDBMS Questo approccio parte dall’assunto che i conflitti possano avvenire di frequente e quindi per evitarli blocca la risorsa alla quale sta accedendo. Il processo blocca l’accesso alla row prima di accedere ai suoi dati in lettura, avendo così la garanzia che solamente questo thread possa modificarla e nessun altro. Al termine dell’operazione rilascerà il LOCK.
  40. 40. Elastic federico.panini@fazland.com - CTO BONUS : gestione dei conflitti #3 : Optimistic Concurrency Control Elasticsearch utilizza questo approccio Al contrario l’assunzione, è che i conflitti avvengano poco di frequente. E quindi il DB non blocca la risorsa quando vi accede. La responsabilità è applicativa : quando i dati sono modificati tra una lettura ed una scrittura allora l’aggiornamento fallisce. In questo caso è necessario recuperare il dato “fresco” e rifarne l’update.
  41. 41. Elastic federico.panini@fazland.com - CTO BONUS : gestione dei conflitti #4 : Optimistic Concurrency Control Elasticsearch è per sua natura distribuito, concorrente ed asincrono. Quando un documento è creato/aggiornato/ eliminato è necessario che questa informazine sia replicata su tutti i nodi del cluster. Ogni informazione è inviata ai vari nodi in parallelo e può succedere che un dato arrivi a destinazione già scaduto.
  42. 42. Elastic federico.panini@fazland.com - CTO BONUS : gestione dei conflitti #5 : Optimistic Concurrency Control E’ necessario che Elasticsearch abbia un modo per non aggiornare un dato più “aggiornato”.
  43. 43. Elastic federico.panini@fazland.com - CTO BONUS : gestione dei conflitti #6 : Optimistic Concurrency Control VERSIONING
  44. 44. Elastic federico.panini@fazland.com - CTO BONUS : gestione dei conflitti #7 : Optimistic Concurrency Control In ogni documento è presente un campo : _version Questo campo è incrementato ogni volta che un operazione sul documento è avvenuta con successo. In questo modo un aggiornamento della versione 3 non andrà mai ad aggiornare un document che è già alla versione 4.
  45. 45. Elastic federico.panini@fazland.com - CTO BONUS : gestione dei conflitti #8 : Optimistic Concurrency Control Attenzione la responsabilità di implementare questa soluzione è tutta APPLICATIVA! quindi nostra. Se vogliamo essere assolutamente sicuri di non avere perdite di dati dobbiamo effettuare scritture utilizzando il version number del documento che vogliamo aggiornare!
  46. 46. Elastic federico.panini@fazland.com - CTO BONUS : gestione dei conflitti #9 : Optimistic Concurrency Control http://www.jillesvangurp.com/2014/12/03/optimistic- locking-for-updates-in-elasticsearch/ https://aphyr.com/posts/317-call-me-maybe- elasticsearch https://www.elastic.co/guide/en/elasticsearch/resiliency/ current/index.html
  47. 47. Elastic federico.panini@fazland.com - CTO Simple searches #1 Create Index API Rest GET DELETE POST SEARCH
  48. 48. Elastic federico.panini@fazland.com - CTO Simple searches - CREATE AN INDEX curl -XPUT http://fazlab.fazland.com:9200/fazlab -d "{ "settings" : { "number_of_shards" : 3, "number_of_replicas" : 1 } }"
  49. 49. Elastic federico.panini@fazland.com - CTO Simple searches - INDEX A DOCUMENT curl -XPUT http://fazlab.fazland.com:9200/fazlab/categories/1?pretty -d ' { nome: "Federico" }'
  50. 50. Elastic federico.panini@fazland.com - CTO Simple searches - GET A DOCUMENT curl http://fazlab.fazland.com:9200/fazlab/categories/1?pretty
  51. 51. Elastic federico.panini@fazland.com - CTO Simple searches - DELETE A DOCUMENT curl -XDELETE http://fazlab.fazland.com:9200/fazlab/categories/2?pretty
  52. 52. Elastic federico.panini@fazland.com - CTO Simple searches #1 DEMO SEARCHES!
  53. 53. Elastic federico.panini@fazland.com - CTO mapping and analysis EXACT MATCH vs FULL TEXT
  54. 54. Elastic federico.panini@fazland.com - CTO mapping and analysis EXACT MATCH vs FULL TEXT Exact match Full Text where name = ‘Federico’ and user_id = 2 and date > “2014-09-15” “Federico è andato al mare” Federico / FEDERICO / federico
  55. 55. Elastic federico.panini@fazland.com - CTO mapping and analysis EXACT MATCH vs FULL TEXT Exact match Full Text binario : il documento contiene questi valori ? Quanto è rilevante il documento per la query digitata ?
  56. 56. Elastic federico.panini@fazland.com - CTO mapping and analysis Elasticsearch per facilitare la ricerca full-text analizza il testo ed utilizza il risultato di questa analisi per costruire un inverted index. Inverted Index Analyzer
  57. 57. Elastic federico.panini@fazland.com - CTO Inverted Index 1. The quick brown fox jumped over the lazy dog 2. Quick brown foxes leap over lazy dogs in summer
  58. 58. Elastic federico.panini@fazland.com - CTO Inverted Index Se dobbiamo cercare la parola “quick” e “brown” prendiamo i documenti dove sono presenti entrambe i termini 1. The quick brown fox jumped over the lazy dog 2. Quick brown foxes leap over lazy dogs in summer
  59. 59. Elastic federico.panini@fazland.com - CTO Inverted Index E’ stato portato tutto in lowercase, stemmer, e synonyms (leap) 1. The quick brown fox jumped over the lazy dog 2. Quick brown foxes leap over lazy dogs in summer
  60. 60. Elastic federico.panini@fazland.com - CTO ANALYZERS Un Analyzer è un elemento che include 3 funzioni: Character filters Tokenizer Token Filters
  61. 61. Elastic federico.panini@fazland.com - CTO ANALYZERS - Character Filters Il primo step è passare ogni stringa ad un character filter il quale è responsabile di ripulire / riordinare le string prima della fase di Tokenizing. in questa fase vengono eliminati i caratteri HTML o “&” è convertito in “and”.
  62. 62. Elastic federico.panini@fazland.com - CTO ANALYZERS - Tokenizer Successivamente la stringa è suddivisa in singoli termini in funzione del Tokenizer selezionato.
  63. 63. Elastic federico.panini@fazland.com - CTO ANALYZERS - Token Filters Successivamente alla fase di Tokenizzazione delle stringhe in singoli termini (terms), i filtri (selezionati) sono applicati in sequenza. Per esempio : - lowercase di tutto il testo - rimuovi le stop words - aggiungi termini come sinonimi
  64. 64. Elastic federico.panini@fazland.com - CTO Standard Analyzer “Set the shape to semi-transparent by calling set_trans(5)” Lo standard analyzer è l’analyzer di default di Elasticsearch. Separa il testo in singole parole e rimuove buona parte della punteggiatura. “set, the, shape, to, semi, transparent, by, calling, set_trans, 5”
  65. 65. Elastic federico.panini@fazland.com - CTO Simple Analyzer “Set the shape to semi-transparent by calling set_trans(5)” Il simple analyzer rimuove tutti i caratteri che non sono lettere e mette tutto il testo in minuscolo. “set, the, shape, to, semi, transparent, by, calling, set, trans”
  66. 66. Elastic federico.panini@fazland.com - CTO Whitespace Analyzer “Set the shape to semi-transparent by calling set_trans(5)” Tokenizza utilizzando gli spazi e non forze le stringhe in minuscolo. “Set, the, shape, to, semi, transparent, by, calling, set_trans(5)”
  67. 67. Elastic federico.panini@fazland.com - CTO Language Analyzer “Set the shape to semi-transparent by calling set_trans(5)” Questo analyzer utilizza le specificità del linguaggio naturale. Può eliminare le stop words e fare stemming. “set, shape, semi, transpar, call, set_tran, 5”
  68. 68. Elastic federico.panini@fazland.com - CTO Language Analyzer arabic, armenian, basque, brazilian, bulgarian, catalan, chinese, cjk, czech, danish, dutch, english, finnish, french, galician, german, greek, hindi, hungarian, indonesian, irish, italian, latvian, norwegian, persian, portuguese, romanian, russian, sorani, spanish, swedish, turkish, thai.
  69. 69. Elastic federico.panini@fazland.com - CTO Pre-built Analyzers Standard Analyzer Simple Analyzer Whitespace Analyzer Stop Analyzer Keyword Analyzer Pattern Analyzer Language Analyzers Snowball Analyzer Custom Analyzer
  70. 70. Elastic federico.panini@fazland.com - CTO Tokenizer Standard Tokenizer Edge NGram Tokenizer Keyword Tokenizer Letter Tokenizer Lowercase Tokenizer NGram Tokenizer Whitespace Tokenizer Pattern Tokenizer UAX Email URL Tokenizer Path Hierarchy Tokenizer
  71. 71. Elastic federico.panini@fazland.com - CTO Token Filters Standard Token Filter ASCII Folding Token Filter Length Token Filter Lowercase Token Filter NGram Token Filter Edge NGram Token Filter Porter Stem Token Filter Shingle Token Filter Stop Token Filter … circa 32 Filters
  72. 72. Elastic federico.panini@fazland.com - CTO Token Filters THE END.
  73. 73. References • Elasticsearch : The Definitive Guide • https://en.wikipedia.org/wiki/Full_text_search • https://www.elastic.co/guide/en/elasticsearch/guide/current/ hardware.html • https://www.elastic.co/guide/en/elasticsearch/guide/current/ heap-sizing.html • https://mtalavera.wordpress.com/2015/02/16/monitoring-with- collectd-and-kibana/ • Fuzzy search : https://www.found.no/foundation/fuzzy-search/ • Phonetic-plugin : https://github.com/elastic/elasticsearch- analysis-phonetic federico.panini@fazland.com - CTO

×