Elastic Search

33
You know, for search February 18 th , 2011, RivieraJUG

description

My talk about Elastic Search, February 18th, RivieraJUG 2011

Transcript of Elastic Search

Page 1: Elastic Search

You know, for search

February 18th, 2011, RivieraJUG

Page 2: Elastic Search

About me

● Lukáš Vlček ( @lukasvlcek )● Java developer since 2001● Joined Red Hat (JBoss division) in 2010● Member of JBoss.org team, focusing on search

Page 3: Elastic Search

In the beginning there was...

Page 4: Elastic Search
Page 5: Elastic Search

Zzzzz...

...Shay Banon is not sleeping but dreaming!

Page 6: Elastic Search

... buzzword dreaming!

Highly-available

RESTfulSearch Engine

CLOUD

Distributed

Asynchronous

{JSON}

Open Sourced(ASL2)

Page 7: Elastic Search

!!

*

*:-)

... and @ElasticSearchwas born!

Page 8: Elastic Search

Dreams do come true

https://github.com/elasticsearch/elasticsearch

http://www.elasticsearch.org

Page 9: Elastic Search

What is ElasticSearch ?

● Distributed● Highly-available● RESTful search engine (on top of Lucene)● Designed to speak JSON (JSON in, JSON out)● and more...

... but first, let's check simple examples.

Page 10: Elastic Search

Demo #1

RESTful JSON teaser

Page 11: Elastic Search

RESTful

● Network interface for data indexing, searching and administration.

curl ­XGET 'http://localhost:9200/index1,index2/typeA,typeB/_search' ­d '{  “query“ : { “match_all“ : {} }}'

You can query one or more indices. Indices can have aliases, you can also use _all for all indices.

Each index have one or more types, something like columns in DB table.

Page 12: Elastic Search

Highly available

● For each index you can specify:● Number of shards

– Each index has fixed number of shards● Number of replicas

– Each shard can have 0-many replicas, can be changed dynamically

Page 13: Elastic Search

Distributed

● Check next slides...

Page 14: Elastic Search

ZEN Discovery

Node 1 Node 4Node 3Node 2

A B C

A1

A2

A3

A1

A2

A3

A1

A2

A3

B1

B2

B1

B2

B1

B2

B1

B2

C1

C: { shards: 1, replicas: 0 }B: { shards: 2, replicas: 3 }A: { shards: 3, replicas: 2 }

Gateway (longterm persistency of cluster data & metadata)

Page 15: Elastic Search

ZEN Discovery

Node 1 Node 4Node 3Node 2

A B C

A1

A2

A3

A1

A2

A3

A1

A2

A3

B1

B2

B1

B2

B1

B2

B1

B2

C1

C: { shards: 1, replicas: 4 }B: { shards: 2, replicas: 3 }A: { shards: 3, replicas: 2 }

C1 C1 C1 C1

Can not allocate all replicas!Check Health API

Gateway (longterm persistency of cluster data & metadata)

Page 16: Elastic Search

Talking to the cluster

Node 3Node 2Node 1

Client

● Native client in Java and Groovy

● Client type:● Node client● Transport Client

Page 17: Elastic Search

Talking to the cluster

Node 3Node 2Node 1

Client

● REST client

● Many clients built on top of REST API● Perl, PHP, Python, Ruby, Erlang, ... etc

Page 18: Elastic Search

Nodes do not have to be equal

● Can be a master● Can be a data node● Can allow for REST transport interface

● Http, memcached, thrift

● Index store (file, memory)● JMX enabled● Thread pool type● ... Node 3Node 2

Node 1

Page 19: Elastic Search

Gateway

● Long time persistency allows for whole (and partial) cluster backup and recovery.

Types:● Local (default)● NFS● HDFS● AWS: S3

Page 20: Elastic Search

Distributed queries

● You can control the type of the search query per search request:● Query and Fetch● Query then Fetch● Dfs, Query and Fetch● Dfs, Query then Fetch

Page 21: Elastic Search

Demo #2

Dynamic allocation of indices,shards, replicas and Health API

Page 22: Elastic Search

Admin API

● Indices– Status– CRUD operation– Mapping, Open/Close, Update settings– Flush, Refresh, Snapshot, Optimize

● Cluster– Health– State– Node Info and stats– Shutdown

Page 23: Elastic Search

Demo #3

Admin API: getting JVM and OS stats

Page 24: Elastic Search

Rich query API

● There is rich Query DSL for search, includes:● Queries

– Boolean, Fuzzy, MLT, Prefix, DisMax, ...● Filters

– And/Or/Not, Boolean, Geo, Missing, Exists, ...● Highlighting● Sort● Facets

– on a next slide...

Page 25: Elastic Search

Facets

● Facets allows to provide aggregated data on the search request.● query● filter● terms● range● (date) histogram● statistical● geo distance

Page 26: Elastic Search

Scripting support

● There is a support for using scripting languages in many places (for example for custom scoring, script fields, script key in facets ...)● mvel (default)● JS● Groovy● Python

Page 27: Elastic Search

Demo #4

Java API: Indexing dataREST API: Faceted search, Highlighting

Page 28: Elastic Search

Parent / Child

● The parent/child support allows to define a parent relationship from a child to a parent type.● has_child (query, filter)● top_children (filter)

Page 29: Elastic Search

River

● Let's listen on stream of changes and index the data...● CouchDB● RabbitMQ● Twitter● Wikipedia

Page 30: Elastic Search

Versioning (new in 0.15)

● “update if current” functionality● ie: I can get a document, change it and then put

it back in (referencing the version ID I fetched) and it will either index or fail (if the document has been modified in the interim)

● Completely real-time

Page 31: Elastic Search

Percolator (new in 0.15)

● The percolator API allows to register queries against an index, and then send a percolate request which includes a document, and getting back the queries that match on that document out of set of registered queries.

Page 32: Elastic Search

Q&A

Page 33: Elastic Search

Thank you!