38
Elasticsearch Mexico City JVM Group April 2016

Elasticsearch JVM-MX Meetup April 2016

Embed Size (px)

Citation preview

Page 1: Elasticsearch JVM-MX Meetup April 2016

ElasticsearchMexico City JVM Group

April 2016

Page 2: Elasticsearch JVM-MX Meetup April 2016

!Gracias por estar aqui¡

Page 3: Elasticsearch JVM-MX Meetup April 2016

¡El meetup con mas asistencia de la historia!

Page 4: Elasticsearch JVM-MX Meetup April 2016

What is the topic tonight?

Page 5: Elasticsearch JVM-MX Meetup April 2016

Elastic search?

Page 6: Elasticsearch JVM-MX Meetup April 2016

NO

Page 7: Elasticsearch JVM-MX Meetup April 2016

Elastic Search?

Page 8: Elasticsearch JVM-MX Meetup April 2016

NO

Page 9: Elasticsearch JVM-MX Meetup April 2016

ElasticSearch?

Page 10: Elasticsearch JVM-MX Meetup April 2016

NO

Page 11: Elasticsearch JVM-MX Meetup April 2016

@superserch?

Page 12: Elasticsearch JVM-MX Meetup April 2016

NO

Page 13: Elasticsearch JVM-MX Meetup April 2016

Elasticsearch

Page 14: Elasticsearch JVM-MX Meetup April 2016

YES

Page 15: Elasticsearch JVM-MX Meetup April 2016

Search

Page 16: Elasticsearch JVM-MX Meetup April 2016

Do I have to elaborate why search is important?

Page 17: Elasticsearch JVM-MX Meetup April 2016

A little history…

Page 18: Elasticsearch JVM-MX Meetup April 2016

Lucene History• Douglass Read "Doug" Cutting wrote Lucene in 1999

• Doug also is the author of Hadoop

• In Lucene other projects came to life

• Mahout

• Tika

• Nutch

Page 19: Elasticsearch JVM-MX Meetup April 2016

Lucene?

Page 20: Elasticsearch JVM-MX Meetup April 2016

• Lucene is an open-source Java full-text search library which makes it easy to add search functionality to an application or website.

Page 21: Elasticsearch JVM-MX Meetup April 2016

Index

Page 22: Elasticsearch JVM-MX Meetup April 2016

Query

Page 23: Elasticsearch JVM-MX Meetup April 2016

Inverted index

• Lucene creates a data structure where it keeps a list of where each word belongs.

Page 24: Elasticsearch JVM-MX Meetup April 2016

Lucene-Based projects

• Solr

• Compass

• Elasticsearch

• Hibernate search

Page 25: Elasticsearch JVM-MX Meetup April 2016

ElasticsearchYou Know, for Search.

Page 26: Elasticsearch JVM-MX Meetup April 2016

Features• Real-Time Data. I (Domingo) say near Real-Time Data.

• Massively Distributed

• High Availability

• Full-Text Search

• Document-Oriented

• Schema-Free

• Developer-Friendly, RESTful API

• Extensible via plugins

Page 27: Elasticsearch JVM-MX Meetup April 2016

Concepts• Cluster

• Node

• Index

• Shard & Replica

• Type

• Mapping

• Document

Page 28: Elasticsearch JVM-MX Meetup April 2016

How data is organized in Elasticsearch

Page 29: Elasticsearch JVM-MX Meetup April 2016

Nodes & shards

Page 30: Elasticsearch JVM-MX Meetup April 2016

Indexing documents

Page 31: Elasticsearch JVM-MX Meetup April 2016

Sharding is crucial

• Shard is a physical Lucene index

• # documents in a Lucent index is 2 billion docs.

• When you create a index you have to declare the # shards, you can’t change later. Beware!

• Don’t try to over-sharding your index! Beware!

Page 32: Elasticsearch JVM-MX Meetup April 2016

Distributed indexing

Page 33: Elasticsearch JVM-MX Meetup April 2016

URL

http://localhost:9200/{index}/{type}/{document_id}

Page 34: Elasticsearch JVM-MX Meetup April 2016

HTTPie for the samples

Page 35: Elasticsearch JVM-MX Meetup April 2016

Creating an index$ http put :9200/my_index/ settings:='{ "index" : { "number_of_shards" : 3, "number_of_replicas" : 0 } }' -v PUT /my_index/ HTTP/1.1 Accept: application/json Accept-Encoding: gzip, deflate Connection: keep-alive Content-Length: 73 Content-Type: application/json Host: localhost:9200 User-Agent: HTTPie/0.9.3

{ "settings": { "index": { "number_of_replicas": 0, "number_of_shards": 3 } } }

HTTP/1.1 200 OK Content-Length: 21 Content-Type: application/json; charset=UTF-8

{ "acknowledged": true }

Page 36: Elasticsearch JVM-MX Meetup April 2016

Creating a type$ http put :9200/my_index/_mapping/my_document properties:='{ "user_name": { "type": "string" } }' -v PUT /my_index/_mapping/my_document1 HTTP/1.1 Accept: application/json Content-Length: 49 Content-Type: application/json

{ "properties": { "user_name": { "type": "string" } } }

HTTP/1.1 200 OK Content-Length: 21 Content-Type: application/json; charset=UTF-8

{ "acknowledged": true }

Page 37: Elasticsearch JVM-MX Meetup April 2016

Indexing$ http :9200/my_index/my_document user_name="Domingo Suarez" -v POST /my_index/my_document1 HTTP/1.1 Content-Length: 31 Content-Type: application/json

{ "user_name": "Domingo Suarez” }

HTTP/1.1 201 Created Content-Length: 149 Content-Type: application/json; charset=UTF-8 { "_id": "AVRaEeBK3Lbw2oDzSIWN", "_index": "my_index", "_shards": { "failed": 0, "successful": 1, "total": 1 }, "_type": "my_document1", "_version": 1, "created": true }

Page 38: Elasticsearch JVM-MX Meetup April 2016

Search $ http :9200/my_index/my_document/_search?q=user_name:Domingo HTTP/1.1 200 OK Content-Length: 657 Content-Type: application/json; charset=UTF-8

{ "_shards": { "failed": 0, "successful": 3, "total": 3 }, "hits": { "hits": [ { "_id": "AVRaEdPJ3Lbw2oDzSIWM", "_index": "my_index", "_score": 0.625, "_source": { "user_name": "Domingo Suarez" }, "_type": "my_document1" } ], "max_score": 0.625, "total": 1 }, "timed_out": false, "took": 5 }