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

Down and dirty with Elasticsearch

Embed Size (px)

DESCRIPTION

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

Citation preview

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