down and dirty with elasticsearch

234
Copyright Elasticsearch 2013. Copying, publishing and/or distributing without written permission is strictly prohibited Getting Down and Dirty with Elasticsearch @clintongormley Berlin Buzzwords 2013

Upload: clintongormley

Post on 26-Jan-2015

122 views

Category:

Technology


3 download

DESCRIPTION

An introduction to Elasticsearch for the programmer. The basic concepts you need to understand to use Elasticsearch as a search engine

TRANSCRIPT

Page 1: Down and dirty with Elasticsearch

Copyright Elasticsearch 2013. Copying, publishing and/or distributing without written permission is strictly prohibited

Getting Down and Dirtywith Elasticsearch

@clintongormleyBerlin Buzzwords 2013

Page 2: Down and dirty with Elasticsearch

Copyright Elasticsearch 2013. Copying, publishing and/or distributing without written permission is strictly prohibited

Elasticsearch

Page 3: Down and dirty with Elasticsearch

Copyright Elasticsearch 2013. Copying, publishing and/or distributing without written permission is strictly prohibited

Elasticsearchreal time,

search and analytics engine

Page 4: Down and dirty with Elasticsearch

Copyright Elasticsearch 2013. Copying, publishing and/or distributing without written permission is strictly prohibited

Elasticsearchreal time,

search and analytics engine

distributed

Page 5: Down and dirty with Elasticsearch

Copyright Elasticsearch 2013. Copying, publishing and/or distributing without written permission is strictly prohibited

Elasticsearchreal time,

search and analytics engine

distributed

scalesmassively

Page 6: Down and dirty with Elasticsearch

Copyright Elasticsearch 2013. Copying, publishing and/or distributing without written permission is strictly prohibited

Elasticsearchreal time,

search and analytics engine

distributed

scalesmassively

highavailability

Page 7: Down and dirty with Elasticsearch

Copyright Elasticsearch 2013. Copying, publishing and/or distributing without written permission is strictly prohibited

Elasticsearchreal time,

search and analytics engine

distributed

scalesmassively

highavailability

RESTfulAPI

Page 8: Down and dirty with Elasticsearch

Copyright Elasticsearch 2013. Copying, publishing and/or distributing without written permission is strictly prohibited

Elasticsearchreal time,

search and analytics engine

distributed

scalesmassively

highavailability

RESTfulAPI

JSON over HTTP

Page 9: Down and dirty with Elasticsearch

Copyright Elasticsearch 2013. Copying, publishing and/or distributing without written permission is strictly prohibited

Elasticsearchreal time,

search and analytics engine

distributed

scalesmassively

highavailability

RESTfulAPI

JSON over HTTP

schemafree

Page 10: Down and dirty with Elasticsearch

Copyright Elasticsearch 2013. Copying, publishing and/or distributing without written permission is strictly prohibited

Elasticsearchreal time,

search and analytics engine

distributed

scalesmassively

highavailability

RESTfulAPI

JSON over HTTP

schemafree

multitenancy

Page 11: Down and dirty with Elasticsearch

Copyright Elasticsearch 2013. Copying, publishing and/or distributing without written permission is strictly prohibited

Elasticsearchreal time,

search and analytics engine

open-source

distributed

scalesmassively

highavailability

RESTfulAPI

JSON over HTTP

schemafree

multitenancy

Page 12: Down and dirty with Elasticsearch

Copyright Elasticsearch 2013. Copying, publishing and/or distributing without written permission is strictly prohibited

Elasticsearchreal time,

search and analytics engine

open-source

Lucenebased

distributed

scalesmassively

highavailability

RESTfulAPI

JSON over HTTP

schemafree

multitenancy

Page 13: Down and dirty with Elasticsearch

Copyright Elasticsearch 2013. Copying, publishing and/or distributing without written permission is strictly prohibited

Cool.

Page 14: Down and dirty with Elasticsearch

Copyright Elasticsearch 2013. Copying, publishing and/or distributing without written permission is strictly prohibited

Cool. Bonsai cool...

Page 15: Down and dirty with Elasticsearch

Copyright Elasticsearch 2013. Copying, publishing and/or distributing without written permission is strictly prohibited

This is WHY we use it...

Page 16: Down and dirty with Elasticsearch

Copyright Elasticsearch 2013. Copying, publishing and/or distributing without written permission is strictly prohibited

> ./bin/elasticsearch> _

Page 17: Down and dirty with Elasticsearch

Copyright Elasticsearch 2013. Copying, publishing and/or distributing without written permission is strictly prohibited

But HOW do we use it?

Page 18: Down and dirty with Elasticsearch

Copyright Elasticsearch 2013. Copying, publishing and/or distributing without written permission is strictly prohibited

> curl -XGET localhost:9200/?pretty

Page 19: Down and dirty with Elasticsearch

Copyright Elasticsearch 2013. Copying, publishing and/or distributing without written permission is strictly prohibited

> curl -XGET localhost:9200/?pretty

verb

Page 20: Down and dirty with Elasticsearch

Copyright Elasticsearch 2013. Copying, publishing and/or distributing without written permission is strictly prohibited

> curl -XGET localhost:9200/?pretty

node

Page 21: Down and dirty with Elasticsearch

Copyright Elasticsearch 2013. Copying, publishing and/or distributing without written permission is strictly prohibited

> curl -XGET localhost:9200/?pretty

HTTP port

Page 22: Down and dirty with Elasticsearch

Copyright Elasticsearch 2013. Copying, publishing and/or distributing without written permission is strictly prohibited

> curl -XGET localhost:9200/?pretty

path

Page 23: Down and dirty with Elasticsearch

Copyright Elasticsearch 2013. Copying, publishing and/or distributing without written permission is strictly prohibited

> curl -XGET localhost:9200/?pretty

query string

Page 24: Down and dirty with Elasticsearch

Copyright Elasticsearch 2013. Copying, publishing and/or distributing without written permission is strictly prohibited

> curl -XGET localhost:9200/?pretty

Page 25: Down and dirty with Elasticsearch

Copyright Elasticsearch 2013. Copying, publishing and/or distributing without written permission is strictly prohibited

GET /

Page 26: Down and dirty with Elasticsearch

Copyright Elasticsearch 2013. Copying, publishing and/or distributing without written permission is strictly prohibited

GET /

{ "name" : "Exploding Man", "tagline" : "You Know, for Search", "ok" : true, "status" : 200, "version" : { "number" : "0.90.1", "snapshot_build" : false }}

Page 27: Down and dirty with Elasticsearch

Copyright Elasticsearch 2013. Copying, publishing and/or distributing without written permission is strictly prohibited

Where do we start?

Page 28: Down and dirty with Elasticsearch

Copyright Elasticsearch 2013. Copying, publishing and/or distributing without written permission is strictly prohibited

With data

Page 29: Down and dirty with Elasticsearch

Copyright Elasticsearch 2013. Copying, publishing and/or distributing without written permission is strictly prohibited

{ "tweet": "I think #elasticsearch is AWESOME", "nick": "@clintongormley", "name": "Clinton Gormley", "date": "2013-06-03", "rt" : 5, "loc": { ! "lat": 13.4, ! "lon": 52.5 }

Page 30: Down and dirty with Elasticsearch

Copyright Elasticsearch 2013. Copying, publishing and/or distributing without written permission is strictly prohibited

How to put it into ES?

Page 31: Down and dirty with Elasticsearch

Copyright Elasticsearch 2013. Copying, publishing and/or distributing without written permission is strictly prohibited

PUT /index/type/id

Page 32: Down and dirty with Elasticsearch

Copyright Elasticsearch 2013. Copying, publishing and/or distributing without written permission is strictly prohibited

PUT /index/type/id

where?

Page 33: Down and dirty with Elasticsearch

Copyright Elasticsearch 2013. Copying, publishing and/or distributing without written permission is strictly prohibited

PUT /myapp/type/id

Page 34: Down and dirty with Elasticsearch

Copyright Elasticsearch 2013. Copying, publishing and/or distributing without written permission is strictly prohibited

PUT /myapp/type/id

what?

Page 35: Down and dirty with Elasticsearch

Copyright Elasticsearch 2013. Copying, publishing and/or distributing without written permission is strictly prohibited

PUT /myapp/tweet/id

Page 36: Down and dirty with Elasticsearch

Copyright Elasticsearch 2013. Copying, publishing and/or distributing without written permission is strictly prohibited

PUT /myapp/tweet/id

which?

Page 37: Down and dirty with Elasticsearch

Copyright Elasticsearch 2013. Copying, publishing and/or distributing without written permission is strictly prohibited

PUT /myapp/tweet/1

Page 38: Down and dirty with Elasticsearch

Copyright Elasticsearch 2013. Copying, publishing and/or distributing without written permission is strictly prohibited

PUT /myapp/tweet/1 -d ' { "tweet": "I think #elasticsearch is AWESOME", "nick": "@clintongormley", "name": "Clinton Gormley", "date": "2013-06-03", "rt": 5, "loc": { ! "lat": 13.4, ! "lon": 52.5 } } '

Page 39: Down and dirty with Elasticsearch

Copyright Elasticsearch 2013. Copying, publishing and/or distributing without written permission is strictly prohibited

{ "_index": "myapp", "_type": "tweet", "_id": "1", "_version": 1, "ok": true}

# 201 CREATED

Page 40: Down and dirty with Elasticsearch

Copyright Elasticsearch 2013. Copying, publishing and/or distributing without written permission is strictly prohibited

Get

Page 41: Down and dirty with Elasticsearch

Copyright Elasticsearch 2013. Copying, publishing and/or distributing without written permission is strictly prohibited

GET /myapp/tweet/1

Page 42: Down and dirty with Elasticsearch

Copyright Elasticsearch 2013. Copying, publishing and/or distributing without written permission is strictly prohibited

{ "_index": "myapp", "_type": "tweet", "_id": "1", "_version": 1, "exists": true, "_source": { ...OUR TWEET... }}

# 200 OK

Page 43: Down and dirty with Elasticsearch

Copyright Elasticsearch 2013. Copying, publishing and/or distributing without written permission is strictly prohibited

Exists?

Page 44: Down and dirty with Elasticsearch

Copyright Elasticsearch 2013. Copying, publishing and/or distributing without written permission is strictly prohibited

HEAD /myapp/tweet/1

Page 45: Down and dirty with Elasticsearch

Copyright Elasticsearch 2013. Copying, publishing and/or distributing without written permission is strictly prohibited

HEAD /myapp/tweet/1 # 200 OK

Page 46: Down and dirty with Elasticsearch

Copyright Elasticsearch 2013. Copying, publishing and/or distributing without written permission is strictly prohibited

HEAD /myapp/tweet/1 # 200 OK

HEAD /myapp/tweet/2 # 404 Not Found

Page 47: Down and dirty with Elasticsearch

Copyright Elasticsearch 2013. Copying, publishing and/or distributing without written permission is strictly prohibited

Update

Page 48: Down and dirty with Elasticsearch

Copyright Elasticsearch 2013. Copying, publishing and/or distributing without written permission is strictly prohibited

PUT /myapp/tweet/1 -d ' { "tweet": "I know #elasticsearch is AWESOME", "nick": "@clintongormley", "name": "Clinton Gormley", "date": "2013-06-03", "rt": 5, "loc": { ! "lat": 13.4, ! "lon": 52.5 } } '

Page 49: Down and dirty with Elasticsearch

Copyright Elasticsearch 2013. Copying, publishing and/or distributing without written permission is strictly prohibited

! atomic DELETE & PUT

Page 50: Down and dirty with Elasticsearch

Copyright Elasticsearch 2013. Copying, publishing and/or distributing without written permission is strictly prohibited

{ "_index": "myapp", "_type": "tweet", "_id": "1", "_version": 2, "ok": true}

# 200 OK

Page 51: Down and dirty with Elasticsearch

Copyright Elasticsearch 2013. Copying, publishing and/or distributing without written permission is strictly prohibited

Delete

Page 52: Down and dirty with Elasticsearch

Copyright Elasticsearch 2013. Copying, publishing and/or distributing without written permission is strictly prohibited

DELETE /myapp/tweet/1

Page 53: Down and dirty with Elasticsearch

Copyright Elasticsearch 2013. Copying, publishing and/or distributing without written permission is strictly prohibited

{ "_index": "myapp", "_type": "tweet", "_id": "1", "_version": 3, "ok": true, "found": true}

# 200 OK

Page 54: Down and dirty with Elasticsearch

Copyright Elasticsearch 2013. Copying, publishing and/or distributing without written permission is strictly prohibited

Optimistic concurrency control

Page 55: Down and dirty with Elasticsearch

Copyright Elasticsearch 2013. Copying, publishing and/or distributing without written permission is strictly prohibited

Optimistic concurrency control

without locking

Page 56: Down and dirty with Elasticsearch

Copyright Elasticsearch 2013. Copying, publishing and/or distributing without written permission is strictly prohibited

PUT /myapp/tweet/1?version=3 -d ' { ... } '

# 200 OK

Page 57: Down and dirty with Elasticsearch

Copyright Elasticsearch 2013. Copying, publishing and/or distributing without written permission is strictly prohibited

PUT /myapp/tweet/1?version=2 -d ' { ... } '

# 409 Conflict

Page 58: Down and dirty with Elasticsearch

Copyright Elasticsearch 2013. Copying, publishing and/or distributing without written permission is strictly prohibited

Update in place

Page 59: Down and dirty with Elasticsearch

Copyright Elasticsearch 2013. Copying, publishing and/or distributing without written permission is strictly prohibited

POST /myapp/tweet/1/_update -d ' { "script": "ctx._source.count+=1", "retry_on_conflict": 3 } '

Page 60: Down and dirty with Elasticsearch

Copyright Elasticsearch 2013. Copying, publishing and/or distributing without written permission is strictly prohibited

POST /myapp/tweet/1/_update -d ' { "script": "ctx._source.count+=1", "retry_on_conflict": 3 } '

GET ! change ! PUT

Page 61: Down and dirty with Elasticsearch

Copyright Elasticsearch 2013. Copying, publishing and/or distributing without written permission is strictly prohibited

Cheaper in bulk

Page 62: Down and dirty with Elasticsearch

Copyright Elasticsearch 2013. Copying, publishing and/or distributing without written permission is strictly prohibited

Anydatastore

Elasticsearch

Client

Mirror external DB

Page 63: Down and dirty with Elasticsearch

Copyright Elasticsearch 2013. Copying, publishing and/or distributing without written permission is strictly prohibited

Anydatastore

Elasticsearch

Client

Standalone

Page 64: Down and dirty with Elasticsearch

Copyright Elasticsearch 2013. Copying, publishing and/or distributing without written permission is strictly prohibited

"Empty" Search

Page 65: Down and dirty with Elasticsearch

Copyright Elasticsearch 2013. Copying, publishing and/or distributing without written permission is strictly prohibited

GET /_search

Page 66: Down and dirty with Elasticsearch

Copyright Elasticsearch 2013. Copying, publishing and/or distributing without written permission is strictly prohibited

GET /_search{ "took" : 2,

}

Page 67: Down and dirty with Elasticsearch

Copyright Elasticsearch 2013. Copying, publishing and/or distributing without written permission is strictly prohibited

GET /_search{ "took" : 2, "timed_out" : false,

}

Page 68: Down and dirty with Elasticsearch

Copyright Elasticsearch 2013. Copying, publishing and/or distributing without written permission is strictly prohibited

GET /_search{ "took" : 2, "timed_out" : false, "_shards" : { "total" : 10, "successful" : 10, "failed" : 0 },

}

Page 69: Down and dirty with Elasticsearch

Copyright Elasticsearch 2013. Copying, publishing and/or distributing without written permission is strictly prohibited

GET /_search{ "took" : 2, "timed_out" : false, "_shards" : { "total" : 10, "successful" : 10, "failed" : 0 }, "hits" : { "total" : 14, "max_score" : 1.0, "hits" : [ { ... }] }}

Page 70: Down and dirty with Elasticsearch

Copyright Elasticsearch 2013. Copying, publishing and/or distributing without written permission is strictly prohibited

GET /_search "hits" : [ { "_index" : "de", "_type" : "tweet", "_id" : "4", "_source" : { ... }, "_score" : 1.0, }, ... ]

Page 71: Down and dirty with Elasticsearch

Copyright Elasticsearch 2013. Copying, publishing and/or distributing without written permission is strictly prohibited

Multi-indexMulti-type

Page 72: Down and dirty with Elasticsearch

Copyright Elasticsearch 2013. Copying, publishing and/or distributing without written permission is strictly prohibited

GET /index/_search

Page 73: Down and dirty with Elasticsearch

Copyright Elasticsearch 2013. Copying, publishing and/or distributing without written permission is strictly prohibited

GET /index/_search

GET /index1,index2/_search

Page 74: Down and dirty with Elasticsearch

Copyright Elasticsearch 2013. Copying, publishing and/or distributing without written permission is strictly prohibited

GET /index/_search

GET /index1,index2/_search

GET /ind*/_search

Page 75: Down and dirty with Elasticsearch

Copyright Elasticsearch 2013. Copying, publishing and/or distributing without written permission is strictly prohibited

GET /index/_search

GET /index1,index2/_search

GET /ind*/_search

GET /index/type/_search

Page 76: Down and dirty with Elasticsearch

Copyright Elasticsearch 2013. Copying, publishing and/or distributing without written permission is strictly prohibited

GET /index/_search

GET /index1,index2/_search

GET /ind*/_search

GET /index/type/_search

GET /index/type1,type2/_search

Page 77: Down and dirty with Elasticsearch

Copyright Elasticsearch 2013. Copying, publishing and/or distributing without written permission is strictly prohibited

GET /index/_search

GET /index1,index2/_search

GET /ind*/_search

GET /index/type/_search

GET /index/type1,type2/_search

GET /index/type*/_search

Page 78: Down and dirty with Elasticsearch

Copyright Elasticsearch 2013. Copying, publishing and/or distributing without written permission is strictly prohibited

GET /index/_search

GET /index1,index2/_search

GET /ind*/_search

GET /index/type/_search

GET /index/type1,type2/_search

GET /index/type*/_search

GET /_all/type*/_search

Page 79: Down and dirty with Elasticsearch

Copyright Elasticsearch 2013. Copying, publishing and/or distributing without written permission is strictly prohibited

Pagination

Page 80: Down and dirty with Elasticsearch

Copyright Elasticsearch 2013. Copying, publishing and/or distributing without written permission is strictly prohibited

Paginationsize = num of results

Page 81: Down and dirty with Elasticsearch

Copyright Elasticsearch 2013. Copying, publishing and/or distributing without written permission is strictly prohibited

Paginationsize = num of resultsfrom = results to skip

Page 82: Down and dirty with Elasticsearch

Copyright Elasticsearch 2013. Copying, publishing and/or distributing without written permission is strictly prohibited

GET /_search?size=5&from=0

GET /_search?size=5&from=5

GET /_search?size=5&from=10

Page 83: Down and dirty with Elasticsearch

Copyright Elasticsearch 2013. Copying, publishing and/or distributing without written permission is strictly prohibited

Search Lite

Page 84: Down and dirty with Elasticsearch

Copyright Elasticsearch 2013. Copying, publishing and/or distributing without written permission is strictly prohibited

Search LiteGET /_search?q=name:john

Page 85: Down and dirty with Elasticsearch

Copyright Elasticsearch 2013. Copying, publishing and/or distributing without written permission is strictly prohibited

+tweet:foo +name:john +date:>2013-05-01

Page 86: Down and dirty with Elasticsearch

Copyright Elasticsearch 2013. Copying, publishing and/or distributing without written permission is strictly prohibited

+tweet:foo +name:john +date:>2013-05-01

→ percent encoding →

Page 87: Down and dirty with Elasticsearch

Copyright Elasticsearch 2013. Copying, publishing and/or distributing without written permission is strictly prohibited

+tweet:foo +name:john +date:>2013-05-01

?q=%2Btweet%3Afoo+%2Bname%3Ajohn+%2Bdate%3A%3E2013-05-01

→ percent encoding →

Page 88: Down and dirty with Elasticsearch

Copyright Elasticsearch 2013. Copying, publishing and/or distributing without written permission is strictly prohibited

GET /_search?q=mary

Page 89: Down and dirty with Elasticsearch

Copyright Elasticsearch 2013. Copying, publishing and/or distributing without written permission is strictly prohibited

→ user named "Mary"

→ tweets by "Mary"

→ tweet mentioning "@mary"

GET /_search?q=mary

Page 90: Down and dirty with Elasticsearch

Copyright Elasticsearch 2013. Copying, publishing and/or distributing without written permission is strictly prohibited

GET /_search?q=_all:mary

→ user named "Mary"

→ tweets by "Mary"

→ tweet mentioning "@mary"

Page 91: Down and dirty with Elasticsearch

Copyright Elasticsearch 2013. Copying, publishing and/or distributing without written permission is strictly prohibited

_all fieldstring values from

all other fields

Page 92: Down and dirty with Elasticsearch

Copyright Elasticsearch 2013. Copying, publishing and/or distributing without written permission is strictly prohibited

GET /_search?q=2013! 12 results

Page 93: Down and dirty with Elasticsearch

Copyright Elasticsearch 2013. Copying, publishing and/or distributing without written permission is strictly prohibited

GET /_search?q=2013! 12 results

GET /_search?q=2013-06-03! 12 results!!

Page 94: Down and dirty with Elasticsearch

Copyright Elasticsearch 2013. Copying, publishing and/or distributing without written permission is strictly prohibited

GET /_search?q=2013! 12 results

GET /_search?q=2013-06-03! 12 results!!

GET /_search?q=date:2013-06-03! 1 result

Page 95: Down and dirty with Elasticsearch

Copyright Elasticsearch 2013. Copying, publishing and/or distributing without written permission is strictly prohibited

GET /_search?q=2013! 12 results

GET /_search?q=2013-06-03! 12 results!!

GET /_search?q=date:2013-06-03! 1 result GET /_search?q=date:2013! 0 results!!

Page 96: Down and dirty with Elasticsearch

Copyright Elasticsearch 2013. Copying, publishing and/or distributing without written permission is strictly prohibited

datatype differences?

Page 97: Down and dirty with Elasticsearch

Copyright Elasticsearch 2013. Copying, publishing and/or distributing without written permission is strictly prohibited

check "mapping"(field definitions)

Page 98: Down and dirty with Elasticsearch

Copyright Elasticsearch 2013. Copying, publishing and/or distributing without written permission is strictly prohibited

GET /myapp/tweet/_mapping

Page 99: Down and dirty with Elasticsearch

Copyright Elasticsearch 2013. Copying, publishing and/or distributing without written permission is strictly prohibited

GET /myapp/tweet/_mapping{ "tweet" : { "properties" : { "tweet" : { "type" : "string" }, "name" : { "type" : "string" }, "nick" : { "type" : "string" }, "date" : { "type" : "date" }, "rt" : { "type" : "long" }, "loc" : { "type": "object", "properties" : { "lat" : { "type" : "double" }, "lon" : { "type" : "double" } } }}}}

Page 100: Down and dirty with Elasticsearch

Copyright Elasticsearch 2013. Copying, publishing and/or distributing without written permission is strictly prohibited

date = type:date _all = type:string

Page 101: Down and dirty with Elasticsearch

Copyright Elasticsearch 2013. Copying, publishing and/or distributing without written permission is strictly prohibited

Exact value vs Full text

Page 102: Down and dirty with Elasticsearch

Copyright Elasticsearch 2013. Copying, publishing and/or distributing without written permission is strictly prohibited

Exact value vs

104.52013-01-01trueFoofoo

Full text

Page 103: Down and dirty with Elasticsearch

Copyright Elasticsearch 2013. Copying, publishing and/or distributing without written permission is strictly prohibited

Exact value vs

104.52013-01-01trueFoofoo

Full text

The quick brown fox jumped over the lazy dog

Page 104: Down and dirty with Elasticsearch

Copyright Elasticsearch 2013. Copying, publishing and/or distributing without written permission is strictly prohibited

Inverted index

“The quick brown fox jumped over the lazy dog”

“Quick brown foxes leap over lazy dogs in summer”

Page 105: Down and dirty with Elasticsearch

Copyright Elasticsearch 2013. Copying, publishing and/or distributing without written permission is strictly prohibited

Inverted index→ separate words / terms

“The quick brown fox jumped over the lazy dog”

“Quick brown foxes leap over lazy dogs in summer”

Page 106: Down and dirty with Elasticsearch

Copyright Elasticsearch 2013. Copying, publishing and/or distributing without written permission is strictly prohibited

Inverted index→ separate words / terms

The,quick,brown,fox,jumped,over,the,lazy,dog

Quick,brown,foxes,leap,over,lazy,dogs,in,summer

Page 107: Down and dirty with Elasticsearch

Copyright Elasticsearch 2013. Copying, publishing and/or distributing without written permission is strictly prohibited

Inverted index

The,quick,brown,fox,jumped,over,the,lazy,dog

Quick,brown,foxes,leap,over,lazy,dogs,in,summer

→ separate words / terms→ sort unique terms

Page 108: Down and dirty with Elasticsearch

Copyright Elasticsearch 2013. Copying, publishing and/or distributing without written permission is strictly prohibited

Inverted index→ separate words / terms→ sort unique terms

The,brown,dog,fox,jumped,lazy,over,quick,the

Quick,brown,dogs,foxes,in,lazy,leap,over,summer

Page 109: Down and dirty with Elasticsearch

Copyright Elasticsearch 2013. Copying, publishing and/or distributing without written permission is strictly prohibited

Inverted index→ separate words / terms→ sort unique terms→ list docs containing terms

The,brown,dog,fox,jumped,lazy,over,quick,the

Quick,brown,dogs,foxes,in,lazy,leap,over,summer

Page 110: Down and dirty with Elasticsearch

Copyright Elasticsearch 2013. Copying, publishing and/or distributing without written permission is strictly prohibited

Term Doc 1 Doc 2

Quick

The

brown

dog

dogs

fox

foxes

in

jumped

lazy

leap

over

quick

summer

the

Page 111: Down and dirty with Elasticsearch

Term Doc 1 Doc 2

Quick

The

brown

dog

dogs

fox

foxes

in

jumped

lazy

leap

over

quick

summer

the

Copyright Elasticsearch 2013. Copying, publishing and/or distributing without written permission is strictly prohibited

q=quick brown

Page 112: Down and dirty with Elasticsearch

Copyright Elasticsearch 2013. Copying, publishing and/or distributing without written permission is strictly prohibited

Term Doc 1 Doc 2

Quick

The

brown

dog

dogs

fox

foxes

in

jumped

lazy

leap

over

quick

summer

the

Page 113: Down and dirty with Elasticsearch

Term Doc 1 Doc 2

Quick

The

brown

dog

dogs

fox

foxes

in

jumped

lazy

leap

over

quick

summer

the

Copyright Elasticsearch 2013. Copying, publishing and/or distributing without written permission is strictly prohibited

q=+Quick +foxes

Page 114: Down and dirty with Elasticsearch

Copyright Elasticsearch 2013. Copying, publishing and/or distributing without written permission is strictly prohibited

Term Doc 1 Doc 2

Quick

The

brown

dog

dogs

fox

foxes

in

jumped

lazy

leap

over

quick

summer

the

Page 115: Down and dirty with Elasticsearch

Term Doc 1 Doc 2

Quick

The

brown

dog

dogs

fox

foxes

in

jumped

lazy

leap

over

quick

summer

the

Copyright Elasticsearch 2013. Copying, publishing and/or distributing without written permission is strictly prohibited

No matches!

Page 116: Down and dirty with Elasticsearch

Copyright Elasticsearch 2013. Copying, publishing and/or distributing without written permission is strictly prohibited

Improving recall

Page 117: Down and dirty with Elasticsearch

Copyright Elasticsearch 2013. Copying, publishing and/or distributing without written permission is strictly prohibited

Term Doc 1 Doc 2

Quick

The

brown

dog

dogs

fox

foxes

in

jumped

lazy

leap

over

quick

summer

the

Page 118: Down and dirty with Elasticsearch

Copyright Elasticsearch 2013. Copying, publishing and/or distributing without written permission is strictly prohibited

Term Doc 1 Doc 2

brown

dog

dogs

fox

foxes

in

jumped

lazy

leap

over

quick

summer

the

Page 119: Down and dirty with Elasticsearch

Copyright Elasticsearch 2013. Copying, publishing and/or distributing without written permission is strictly prohibited

Term Doc 1 Doc 2

brown

dog

dogs

fox

foxes

in

jumped

lazy

leap

over

quick

summer

the

Page 120: Down and dirty with Elasticsearch

Copyright Elasticsearch 2013. Copying, publishing and/or distributing without written permission is strictly prohibited

Term Doc 1 Doc 2

brown

dog

fox

in

jumped

lazy

leap

over

quick

summer

the

Page 121: Down and dirty with Elasticsearch

Copyright Elasticsearch 2013. Copying, publishing and/or distributing without written permission is strictly prohibited

Term Doc 1 Doc 2

brown

dog

fox

in

jumped

lazy

leap

over

quick

summer

the

Page 122: Down and dirty with Elasticsearch

Copyright Elasticsearch 2013. Copying, publishing and/or distributing without written permission is strictly prohibited

Term Doc 1 Doc 2

brown

dog

fox

in

jump

leap

over

quick

summer

the

Page 123: Down and dirty with Elasticsearch

Copyright Elasticsearch 2013. Copying, publishing and/or distributing without written permission is strictly prohibited

normalize terms

Page 124: Down and dirty with Elasticsearch

Copyright Elasticsearch 2013. Copying, publishing and/or distributing without written permission is strictly prohibited

Term Doc 1 Doc 2

brown

dog

fox

in

jump

leap

over

quick

summer

the

Page 125: Down and dirty with Elasticsearch

Term Doc 1 Doc 2

brown

dog

fox

in

jump

leap

over

quick

summer

the

Copyright Elasticsearch 2013. Copying, publishing and/or distributing without written permission is strictly prohibited

q=+Quick +foxes

Page 126: Down and dirty with Elasticsearch

Copyright Elasticsearch 2013. Copying, publishing and/or distributing without written permission is strictly prohibited

Term Doc 1 Doc 2

brown

dog

fox

in

jump

leap

over

quick

summer

the

Page 127: Down and dirty with Elasticsearch

Copyright Elasticsearch 2013. Copying, publishing and/or distributing without written permission is strictly prohibited

normalize terms

in query too!

Page 128: Down and dirty with Elasticsearch

Term Doc 1 Doc 2

brown

dog

fox

in

jump

leap

over

quick

summer

the

Copyright Elasticsearch 2013. Copying, publishing and/or distributing without written permission is strictly prohibited

q=+Quick +foxes

Page 129: Down and dirty with Elasticsearch

Term Doc 1 Doc 2

brown

dog

fox

in

jump

leap

over

quick

summer

the

Copyright Elasticsearch 2013. Copying, publishing and/or distributing without written permission is strictly prohibited

q=+quick +foxes

Page 130: Down and dirty with Elasticsearch

Term Doc 1 Doc 2

brown

dog

fox

in

jump

leap

over

quick

summer

the

Copyright Elasticsearch 2013. Copying, publishing and/or distributing without written permission is strictly prohibited

q=+quick +fox

Page 131: Down and dirty with Elasticsearch

Term Doc 1 Doc 2

brown

dog

fox

in

jump

leap

over

quick

summer

the

Copyright Elasticsearch 2013. Copying, publishing and/or distributing without written permission is strictly prohibited

Page 132: Down and dirty with Elasticsearch

Copyright Elasticsearch 2013. Copying, publishing and/or distributing without written permission is strictly prohibited

"Analysis"

Page 133: Down and dirty with Elasticsearch

Copyright Elasticsearch 2013. Copying, publishing and/or distributing without written permission is strictly prohibited

"Analysis"tokenization + normalization

Page 134: Down and dirty with Elasticsearch

Copyright Elasticsearch 2013. Copying, publishing and/or distributing without written permission is strictly prohibited

"Analysers"tokenizer + token filters

Page 135: Down and dirty with Elasticsearch

Copyright Elasticsearch 2013. Copying, publishing and/or distributing without written permission is strictly prohibited

standard analyzer

"The Quick Brown Fox jumped

over the Lazy Dog!"

Page 136: Down and dirty with Elasticsearch

Copyright Elasticsearch 2013. Copying, publishing and/or distributing without written permission is strictly prohibited

standard analyzer→ standard tokenizer

"The Quick Brown Fox jumped

over the Lazy Dog!"

Page 137: Down and dirty with Elasticsearch

Copyright Elasticsearch 2013. Copying, publishing and/or distributing without written permission is strictly prohibited

standard analyzer→ standard tokenizer

The,Quick,Brown,Fox,jumped,

over,the,Lazy,Dog

Page 138: Down and dirty with Elasticsearch

Copyright Elasticsearch 2013. Copying, publishing and/or distributing without written permission is strictly prohibited

standard analyzer→ standard tokenizer→ lowercase filter

The,Quick,Brown,Fox,jumped,

over,the,Lazy,Dog

Page 139: Down and dirty with Elasticsearch

Copyright Elasticsearch 2013. Copying, publishing and/or distributing without written permission is strictly prohibited

standard analyzer→ standard tokenizer→ lowercase filter

the,quick,brown,fox,jumped,

over,the,lazy,dog

Page 140: Down and dirty with Elasticsearch

Copyright Elasticsearch 2013. Copying, publishing and/or distributing without written permission is strictly prohibited

standard analyzer→ standard tokenizer→ lowercase filter→ stopwords filter

the,quick,brown,fox,jumped,

over,the,lazy,dog

Page 141: Down and dirty with Elasticsearch

Copyright Elasticsearch 2013. Copying, publishing and/or distributing without written permission is strictly prohibited

standard analyzer→ standard tokenizer→ lowercase filter→ stopwords filter

,quick,brown,fox,jumped,

over, ,lazy,dog

Page 142: Down and dirty with Elasticsearch

Copyright Elasticsearch 2013. Copying, publishing and/or distributing without written permission is strictly prohibited

english analyzer→ standard tokenizer→ lowercase filter

the,quick,brown,fox,jumped,

over,the,lazy,dog

Page 143: Down and dirty with Elasticsearch

Copyright Elasticsearch 2013. Copying, publishing and/or distributing without written permission is strictly prohibited

english analyzer→ standard tokenizer→ lowercase filter→ english stemmer

the,quick,brown,fox,jumped,

over,the,lazy,dog

Page 144: Down and dirty with Elasticsearch

Copyright Elasticsearch 2013. Copying, publishing and/or distributing without written permission is strictly prohibited

english analyzer→ standard tokenizer → lowercase filter → english stemmer

the,quick,brown,fox,jumped,

over,the,lazy,dog

Page 145: Down and dirty with Elasticsearch

Copyright Elasticsearch 2013. Copying, publishing and/or distributing without written permission is strictly prohibited

english analyzer→ standard tokenizer→ lowercase filter→ english stemmer

the,quick,brown,fox,jump,

over,the,lazy,dog

Page 146: Down and dirty with Elasticsearch

Copyright Elasticsearch 2013. Copying, publishing and/or distributing without written permission is strictly prohibited

english analyzer→ standard tokenizer→ lowercase filter→ english stemmer→ english stopwords

the,quick,brown,fox,jump,

over,the,lazy,dog

Page 147: Down and dirty with Elasticsearch

Copyright Elasticsearch 2013. Copying, publishing and/or distributing without written permission is strictly prohibited

english analyzer→ standard tokenizer→ lowercase filter→ english stemmer→ english stopwords

,quick,brown,fox,jump,

over, ,lazy,dog

Page 148: Down and dirty with Elasticsearch

Copyright Elasticsearch 2013. Copying, publishing and/or distributing without written permission is strictly prohibited

date = type:date _all = type:string

Page 149: Down and dirty with Elasticsearch

Copyright Elasticsearch 2013. Copying, publishing and/or distributing without written permission is strictly prohibited

date = exact value _all = full text

Page 150: Down and dirty with Elasticsearch

Copyright Elasticsearch 2013. Copying, publishing and/or distributing without written permission is strictly prohibited

date = 2013-06-03 _all = 2013,06,03

Page 151: Down and dirty with Elasticsearch

Copyright Elasticsearch 2013. Copying, publishing and/or distributing without written permission is strictly prohibited

GET /_search?q=2013! 12 results

Page 152: Down and dirty with Elasticsearch

Copyright Elasticsearch 2013. Copying, publishing and/or distributing without written permission is strictly prohibited

GET /_search?q=2013! 12 results

GET /_search?q=2013-06-03! 12 results

Page 153: Down and dirty with Elasticsearch

Copyright Elasticsearch 2013. Copying, publishing and/or distributing without written permission is strictly prohibited

GET /_search?q=2013! 12 results

GET /_search?q=2013 OR 06 OR 03! 12 results

Page 154: Down and dirty with Elasticsearch

Copyright Elasticsearch 2013. Copying, publishing and/or distributing without written permission is strictly prohibited

GET /_search?q=2013! 12 results

GET /_search?q=2013-06-03! 12 results

GET /_search?q=date:2013-06-03! 1 result

Page 155: Down and dirty with Elasticsearch

Copyright Elasticsearch 2013. Copying, publishing and/or distributing without written permission is strictly prohibited

GET /_search?q=2013! 12 results

GET /_search?q=2013-06-03! 12 results

GET /_search?q=date:2013-06-03! 1 result GET /_search?q=date:2013! 0 results

Page 156: Down and dirty with Elasticsearch

Copyright Elasticsearch 2013. Copying, publishing and/or distributing without written permission is strictly prohibited

Field mapping

Page 157: Down and dirty with Elasticsearch

Copyright Elasticsearch 2013. Copying, publishing and/or distributing without written permission is strictly prohibited

Strings: string

Datetimes: date

Whole numbers: byte, short, integer, long

Floats: float, double

Booleans: boolean

Objects: object

Core field types

Page 158: Down and dirty with Elasticsearch

Copyright Elasticsearch 2013. Copying, publishing and/or distributing without written permission is strictly prohibited

Strings: string

Datetimes: date

Whole numbers: byte, short, integer, long

Floats: float, double

Booleans: boolean

Objects: object

Also: multi_field, ip, geo_point, geo_shape,

Core field types

Page 159: Down and dirty with Elasticsearch

Copyright Elasticsearch 2013. Copying, publishing and/or distributing without written permission is strictly prohibited

"foo bar" string

"2013-01-01" date

10 byte, short, integer, long

10.0 float, double

true boolean

{ foo: "bar" } object

Dynamic detection

Page 160: Down and dirty with Elasticsearch

Copyright Elasticsearch 2013. Copying, publishing and/or distributing without written permission is strictly prohibited

"foo bar" string

"2013-01-01" date

10 byte, short, integer, long

10.0 float, double

true boolean

{ foo: "bar" } object

["foo","bar"] No special mapping. Any

field can have multi-vals

Dynamic detection

Page 161: Down and dirty with Elasticsearch

Copyright Elasticsearch 2013. Copying, publishing and/or distributing without written permission is strictly prohibited

Most important: type

Page 162: Down and dirty with Elasticsearch

Copyright Elasticsearch 2013. Copying, publishing and/or distributing without written permission is strictly prohibited

{ "tweet" : { "properties" : { "tweet" : { "type" : "string" }, "name" : { "type" : "string" }, "nick" : { "type" : "string" }, "date" : { "type" : "date" }, "rt" : { "type" : "long" }, "loc" : { "type": "object", "properties" : { "lat" : { "type" : "double" }, "lon" : { "type" : "double" } } }

}}}

Page 163: Down and dirty with Elasticsearch

Copyright Elasticsearch 2013. Copying, publishing and/or distributing without written permission is strictly prohibited

{ "tweet" : { "properties" : { "tweet" : { "type" : "string" }, "name" : { "type" : "string" }, "nick" : { "type" : "string" }, "date" : { "type" : "date" }, "rt" : { "type" : "long" }, "loc" : { "type" : "geo_point" }}}}

Page 164: Down and dirty with Elasticsearch

Copyright Elasticsearch 2013. Copying, publishing and/or distributing without written permission is strictly prohibited

Full text vs Exact string

Page 165: Down and dirty with Elasticsearch

Copyright Elasticsearch 2013. Copying, publishing and/or distributing without written permission is strictly prohibited

Full text: (default) { "type": "string", "index": "analyzed" }

Page 166: Down and dirty with Elasticsearch

Copyright Elasticsearch 2013. Copying, publishing and/or distributing without written permission is strictly prohibited

Full text: (default) { "type": "string", "index": "analyzed" }

Exact string: { "type": "string", "index": "not_analyzed" }

Page 167: Down and dirty with Elasticsearch

Copyright Elasticsearch 2013. Copying, publishing and/or distributing without written permission is strictly prohibited

Full text: (default) { "type": "string", "index": "analyzed" }

Exact string: { "type": "string", "index": "not_analyzed" }

Not searchable: { "type": "string", "index": "no" }

Page 168: Down and dirty with Elasticsearch

Copyright Elasticsearch 2013. Copying, publishing and/or distributing without written permission is strictly prohibited

{ "tweet" : { "properties" : { "tweet" : { "type" : "string" }, "name" : { "type" : "string" }, "nick" : { "type" : "string" }, "date" : { "type" : "date" }, "rt" : { "type" : "long" }, "loc" : { "type" : "geo_point" }}}}

Page 169: Down and dirty with Elasticsearch

Copyright Elasticsearch 2013. Copying, publishing and/or distributing without written permission is strictly prohibited

{ "tweet" : { "properties" : { "tweet" : { "type" : "string" }, "name" : { "type" : "string" }, "nick" : { "type" : "string", "index" : "not_analyzed" }, "date" : { "type" : "date" }, "rt" : { "type" : "long" }, "loc" : { "type" : "geo_point" }}}}

Page 170: Down and dirty with Elasticsearch

Copyright Elasticsearch 2013. Copying, publishing and/or distributing without written permission is strictly prohibited

Analyzer

Page 171: Down and dirty with Elasticsearch

Copyright Elasticsearch 2013. Copying, publishing and/or distributing without written permission is strictly prohibited

{ "tweet" : { "properties" : { "tweet" : { "type" : "string" }, "name" : { "type" : "string" }, "nick" : { "type" : "string", "index" : "not_analyzed" }, "date" : { "type" : "date" }, "rt" : { "type" : "long" }, "loc" : { "type" : "geo_point" }}}}

Page 172: Down and dirty with Elasticsearch

Copyright Elasticsearch 2013. Copying, publishing and/or distributing without written permission is strictly prohibited

{ "tweet" : { "properties" : { "tweet" : { "type" : "string", "analyzer" : "english" }, "name" : { "type" : "string" }, "nick" : { "type" : "string", "index" : "not_analyzed" }, "date" : { "type" : "date" }, "rt" : { "type" : "long" }, "loc" : { "type" : "geo_point" }}}}

Page 173: Down and dirty with Elasticsearch

Copyright Elasticsearch 2013. Copying, publishing and/or distributing without written permission is strictly prohibited

Updating mappings

Page 174: Down and dirty with Elasticsearch

Copyright Elasticsearch 2013. Copying, publishing and/or distributing without written permission is strictly prohibited

Can: add new fields

Page 175: Down and dirty with Elasticsearch

Copyright Elasticsearch 2013. Copying, publishing and/or distributing without written permission is strictly prohibited

Can: add new fieldsPUT /myapp/tweet/_mapping -d '{ "tweet": { "properties": { ... } }}'

Page 176: Down and dirty with Elasticsearch

Copyright Elasticsearch 2013. Copying, publishing and/or distributing without written permission is strictly prohibited

Cannot: change fields

Page 177: Down and dirty with Elasticsearch

Copyright Elasticsearch 2013. Copying, publishing and/or distributing without written permission is strictly prohibited

Cannot: change fieldsDELETE /myapp

Page 178: Down and dirty with Elasticsearch

Copyright Elasticsearch 2013. Copying, publishing and/or distributing without written permission is strictly prohibited

Cannot: change fieldsPUT /myapp -d '{ "mappings": { "tweet": { "properties": { ... } } } }'

Page 179: Down and dirty with Elasticsearch

Copyright Elasticsearch 2013. Copying, publishing and/or distributing without written permission is strictly prohibited

Full body search

Page 180: Down and dirty with Elasticsearch

Copyright Elasticsearch 2013. Copying, publishing and/or distributing without written permission is strictly prohibited

GET /_search -d '{ "query": { "match_all": {} }, "from": 0, "size": 10}'

Page 181: Down and dirty with Elasticsearch

Copyright Elasticsearch 2013. Copying, publishing and/or distributing without written permission is strictly prohibited

GET /_search -d '{ "query": { "match_all": {} }, "from": 0, "size": 10}'

Page 182: Down and dirty with Elasticsearch

Copyright Elasticsearch 2013. Copying, publishing and/or distributing without written permission is strictly prohibited

Query DSLrich flexible query language

Page 183: Down and dirty with Elasticsearch

Copyright Elasticsearch 2013. Copying, publishing and/or distributing without written permission is strictly prohibited

{ "match": { "tweet": "search" } }

Page 184: Down and dirty with Elasticsearch

Copyright Elasticsearch 2013. Copying, publishing and/or distributing without written permission is strictly prohibited

GET /_search -d '{{ "query": { "match": { "tweet": "search" } }}

Page 185: Down and dirty with Elasticsearch

Copyright Elasticsearch 2013. Copying, publishing and/or distributing without written permission is strictly prohibited

Filters vs Queries

Page 186: Down and dirty with Elasticsearch

Copyright Elasticsearch 2013. Copying, publishing and/or distributing without written permission is strictly prohibited

Filters vsexact matching

Queriesfull text search

Page 187: Down and dirty with Elasticsearch

Copyright Elasticsearch 2013. Copying, publishing and/or distributing without written permission is strictly prohibited

Filters vsexact matchingbinary yes/no

Queriesfull text searchrelevance scoring

Page 188: Down and dirty with Elasticsearch

Copyright Elasticsearch 2013. Copying, publishing and/or distributing without written permission is strictly prohibited

Filters vsexact matchingbinary yes/nofast

Queriesfull text searchrelevance scoringheavier

Page 189: Down and dirty with Elasticsearch

Copyright Elasticsearch 2013. Copying, publishing and/or distributing without written permission is strictly prohibited

Filters vsexact matchingbinary yes/nofastcacheable

Queriesfull text searchrelevance scoringheaviernot cacheable

Page 190: Down and dirty with Elasticsearch

Copyright Elasticsearch 2013. Copying, publishing and/or distributing without written permission is strictly prohibited

Query: { "match": { "tweet": "search" }}

Filter: { "term": { "nick": "@mary" }}

Combine filter & query

Page 191: Down and dirty with Elasticsearch

Copyright Elasticsearch 2013. Copying, publishing and/or distributing without written permission is strictly prohibited

{ "filtered": { "query": { "match": { "tweet": "search" } }, "filter": { "term": { "nick": "@mary" } } } }

Combine filter & query

Page 192: Down and dirty with Elasticsearch

Copyright Elasticsearch 2013. Copying, publishing and/or distributing without written permission is strictly prohibited

GET /_search -d '{ "query": { "filtered": { "query": { "match": { "tweet": "search" } }, "filter": { "term": { "nick": "@mary" } } } }}'

Combine filter & query

Page 193: Down and dirty with Elasticsearch

Copyright Elasticsearch 2013. Copying, publishing and/or distributing without written permission is strictly prohibited

GET /_search -d '{ "query": { "filtered": { "query": { "match_all": {} }, "filter": { "term": { "nick": "@mary" } } } }}'

Just a filter

Page 194: Down and dirty with Elasticsearch

Copyright Elasticsearch 2013. Copying, publishing and/or distributing without written permission is strictly prohibited

GET /_search -d '{ "query": { "filtered": { "filter": { "term": { "nick": "@mary" } } } }}'

Just a filter

Page 195: Down and dirty with Elasticsearch

Copyright Elasticsearch 2013. Copying, publishing and/or distributing without written permission is strictly prohibited

GET /_search -d '{ "query": { "filtered": { "filter": { "term": { "nick": "@mary" } } } }, "sort": { "date": "desc" }}'

User's tweets by date

Page 196: Down and dirty with Elasticsearch

Copyright Elasticsearch 2013. Copying, publishing and/or distributing without written permission is strictly prohibited

GET /_search -d '{ "query": { "filtered": { "filter": { "range": { "date": { "gte": "2013-05-01", "lt": "2013-06-01" } } }}}}'

Tweets for last month

Page 197: Down and dirty with Elasticsearch

Copyright Elasticsearch 2013. Copying, publishing and/or distributing without written permission is strictly prohibited

GET /_all/tweet/_search -d '{ "facets": { "top_tweeters": { "terms": { "field": "nick" } } }}'

Top tweeters

Page 198: Down and dirty with Elasticsearch

Copyright Elasticsearch 2013. Copying, publishing and/or distributing without written permission is strictly prohibited

GET /_all/tweet/_search -d '{ "facets": { "top_tweeters": { "terms": { "field": "nick" } } }, "query": { "match": { "tweet": "elasticsearch" } }}'

Top tweeters for query

Page 199: Down and dirty with Elasticsearch

Copyright Elasticsearch 2013. Copying, publishing and/or distributing without written permission is strictly prohibited

GET /_all/tweet/_search -d '{ "facets": { "tweets_by_month": { "date_histogram": { "field": "date", "interval": "month" } } }}'

Tweets by month

Page 200: Down and dirty with Elasticsearch

Copyright Elasticsearch 2013. Copying, publishing and/or distributing without written permission is strictly prohibited

Autocomplete

{ "match": { "name": "joh" }}

"John Smith

Johnny Depp

Lyndon Johnson

Page 201: Down and dirty with Elasticsearch

Copyright Elasticsearch 2013. Copying, publishing and/or distributing without written permission is strictly prohibited

Autocomplete

{ "match": { "name": "joh" }}

"John Smith

Johnny Depp

Lyndon Johnson

But "joh" doesn't exist in the index

Page 202: Down and dirty with Elasticsearch

Copyright Elasticsearch 2013. Copying, publishing and/or distributing without written permission is strictly prohibited

N-grams == window-on-a-word:

Autocomplete

Page 203: Down and dirty with Elasticsearch

Copyright Elasticsearch 2013. Copying, publishing and/or distributing without written permission is strictly prohibited

N-grams == window-on-a-word:

Length 1: j,o,h,n,s,m,i,t,h

Autocomplete

Page 204: Down and dirty with Elasticsearch

Copyright Elasticsearch 2013. Copying, publishing and/or distributing without written permission is strictly prohibited

N-grams == window-on-a-word:

Length 1: j,o,h,n,s,m,i,t,h Length 2: jo,oh,hn,sm,mi,it,th

Autocomplete

Page 205: Down and dirty with Elasticsearch

Copyright Elasticsearch 2013. Copying, publishing and/or distributing without written permission is strictly prohibited

N-grams == window-on-a-word:

Length 1: j,o,h,n,s,m,i,t,h Length 2: jo,oh,hn,sm,mi,it,th Length 3: joh,ohn,smi,mit,ith Length 4: john,smit,mith

Autocomplete

Page 206: Down and dirty with Elasticsearch

Copyright Elasticsearch 2013. Copying, publishing and/or distributing without written permission is strictly prohibited

N-grams == window-on-a-word:

Length 1: j,o,h,n,s,m,i,t,h Length 2: jo,oh,hn,sm,mi,it,th Length 3: joh,ohn,smi,mit,ith Length 4: john,smit,mith

Autocomplete

Good for partial word matching

Page 207: Down and dirty with Elasticsearch

Copyright Elasticsearch 2013. Copying, publishing and/or distributing without written permission is strictly prohibited

Edge N-grams == anchored N-grams:

Autocomplete

Page 208: Down and dirty with Elasticsearch

Copyright Elasticsearch 2013. Copying, publishing and/or distributing without written permission is strictly prohibited

Edge N-grams == anchored N-grams:

j jo joh john s sm smi smit smith

Autocomplete

Page 209: Down and dirty with Elasticsearch

Edge N-grams == anchored N-grams:

j jo joh john s sm smi smit smith

Copyright Elasticsearch 2013. Copying, publishing and/or distributing without written permission is strictly prohibited

Autocomplete

⇒ Perfect for

autocomplete

Page 210: Down and dirty with Elasticsearch

Copyright Elasticsearch 2013. Copying, publishing and/or distributing without written permission is strictly prohibited

Edge N-Gram token filter{ "filter": { "autocomplete": { "type": "edge_ngram", "min_gram": 1, "max_gram": 20 } }}

Page 211: Down and dirty with Elasticsearch

Copyright Elasticsearch 2013. Copying, publishing and/or distributing without written permission is strictly prohibited

Name field analyzers{ "analyzer": { "name": { "type": "standard", "stopwords": [] },

}}

Page 212: Down and dirty with Elasticsearch

Copyright Elasticsearch 2013. Copying, publishing and/or distributing without written permission is strictly prohibited

Name field analyzers{ "analyzer": { "name": { "type": "standard", "stopwords": [] }, "name_autocomplete": { "type": "custom", "tokenizer": "standard", "filter": ["lowercase","autocomplete"] } }}

Page 213: Down and dirty with Elasticsearch

Copyright Elasticsearch 2013. Copying, publishing and/or distributing without written permission is strictly prohibited

Name field mapping{ "name": { "type": "string" }}

Page 214: Down and dirty with Elasticsearch

Copyright Elasticsearch 2013. Copying, publishing and/or distributing without written permission is strictly prohibited

Name field mapping{ "name": { "type": "string" }}

multi_field == one field, multi-purposes

Page 215: Down and dirty with Elasticsearch

Copyright Elasticsearch 2013. Copying, publishing and/or distributing without written permission is strictly prohibited

Name field mapping{ "name": { "type": "multi_field", "fields": { "name": {

}, "autocomplete": {

}}}

Page 216: Down and dirty with Elasticsearch

Copyright Elasticsearch 2013. Copying, publishing and/or distributing without written permission is strictly prohibited

Name field mapping{ "name": { "type": "multi_field", "fields": { "name": {

}, "autocomplete": {

}}}

Main field: "name" or "name.name"

Page 217: Down and dirty with Elasticsearch

Copyright Elasticsearch 2013. Copying, publishing and/or distributing without written permission is strictly prohibited

Name field mapping{ "name": { "type": "multi_field", "fields": { "name": { "type": "string", "analyzer": "name" }, "autocomplete": {

}}}

Page 218: Down and dirty with Elasticsearch

Copyright Elasticsearch 2013. Copying, publishing and/or distributing without written permission is strictly prohibited

Name field mapping{ "name": { "type": "multi_field", "fields": { "name": { "type": "string", "analyzer": "name" }, "autocomplete": {

}}}

Sub field: "name.autocomplete"

Page 219: Down and dirty with Elasticsearch

Copyright Elasticsearch 2013. Copying, publishing and/or distributing without written permission is strictly prohibited

Name field mapping{ "name": { "type": "multi_field", "fields": { "name": { "type": "string", "analyzer": "name" }, "autocomplete": { "type": "string", "index_analyzer": "name_autocomplete", "search_analyzer": "name" }}}

Page 220: Down and dirty with Elasticsearch

Copyright Elasticsearch 2013. Copying, publishing and/or distributing without written permission is strictly prohibited

DELETE /myapp

Recreate the index

Page 221: Down and dirty with Elasticsearch

Copyright Elasticsearch 2013. Copying, publishing and/or distributing without written permission is strictly prohibited

PUT /myapp -d '{ "settings": { "analysis": { "analyzer": {...}, "filter": {...} } },

}

Recreate the index

Page 222: Down and dirty with Elasticsearch

Copyright Elasticsearch 2013. Copying, publishing and/or distributing without written permission is strictly prohibited

PUT /myapp -d '{ "settings": { "analysis": { "analyzer": {...}, "filter": {...} } }, "mappings": { "tweet": { "properties": {...} } }}

Recreate the index

Page 223: Down and dirty with Elasticsearch

Copyright Elasticsearch 2013. Copying, publishing and/or distributing without written permission is strictly prohibited

{ "match": { "name.autocomplete": "john smi" }}

Autocomplete query

Page 224: Down and dirty with Elasticsearch

Copyright Elasticsearch 2013. Copying, publishing and/or distributing without written permission is strictly prohibited

{ "match": { "name.autocomplete": "john smi" }}

Autocomplete query

Better: favor whole word matches

Page 225: Down and dirty with Elasticsearch

Copyright Elasticsearch 2013. Copying, publishing and/or distributing without written permission is strictly prohibited

{ "bool": { "must": [{...},{...}], "must_not": [{...},{...}], "should": [{...},{...}] }}

Autocomplete query

Combines multiple query clauses

Page 226: Down and dirty with Elasticsearch

Copyright Elasticsearch 2013. Copying, publishing and/or distributing without written permission is strictly prohibited

{ "bool": { "must": [{...},{...}], "must_not": [{...},{...}], "should": [{...},{...}] }}

Autocomplete query

MUST match

Page 227: Down and dirty with Elasticsearch

Copyright Elasticsearch 2013. Copying, publishing and/or distributing without written permission is strictly prohibited

{ "bool": { "must": [{...},{...}], "must_not": [{...},{...}], "should": [{...},{...}] }}

Autocomplete query

MUST NOT match

Page 228: Down and dirty with Elasticsearch

Copyright Elasticsearch 2013. Copying, publishing and/or distributing without written permission is strictly prohibited

{ "bool": { "must": [{...},{...}], "must_not": [{...},{...}], "should": [{...},{...}] }}

Autocomplete query

"More relevant" if these match

Page 229: Down and dirty with Elasticsearch

Copyright Elasticsearch 2013. Copying, publishing and/or distributing without written permission is strictly prohibited

{ "bool": { "must": { "match": { "name.autocomplete": "john smi" } }, "should": { "match": { "name": "john smi" } }

Autocomplete query

Page 230: Down and dirty with Elasticsearch

Copyright Elasticsearch 2013. Copying, publishing and/or distributing without written permission is strictly prohibited

{ "custom_score_query": { "query": { "match": { "tweet": "search" }}, "script": "_score * (1+log(doc['rt'].value))" }}

Boost popular tweets

Page 231: Down and dirty with Elasticsearch

Copyright Elasticsearch 2013. Copying, publishing and/or distributing without written permission is strictly prohibited

{ "filtered": { "query": { "match": { "tweet": "search" }}, "filter": { "geo_distance": { "distance": "100km", "loc": { "lat": 13.4, "lon": 52.5 } } }

Filter local tweets

Page 232: Down and dirty with Elasticsearch

Copyright Elasticsearch 2013. Copying, publishing and/or distributing without written permission is strictly prohibited

{ "custom_filters_score_query": { "query": { "match": { "tweet": "search" }}, "filters": [

]}}

Boost local tweets

Page 233: Down and dirty with Elasticsearch

Copyright Elasticsearch 2013. Copying, publishing and/or distributing without written permission is strictly prohibited

{ "custom_filters_score_query": { "query": { "match": { "tweet": "search" }}, "filters": [ { "boost": 2, "filter": { "geo_distance": { "distance": "100km", "loc": { "lat": 13.4, "lon": 52.5 } }}} ]}}

Boost local tweets

Page 234: Down and dirty with Elasticsearch

Copyright Elasticsearch 2013. Copying, publishing and/or distributing without written permission is strictly prohibited

www.elasticsearch.org