real-time search in drupal. meet elasticsearch

68
Real-time search in Drupal. Meet Elasticsearch By Alexei Gorobets asgorobets

Upload: alexei-gorobets

Post on 26-Jan-2015

121 views

Category:

Technology


2 download

DESCRIPTION

 

TRANSCRIPT

Page 2: Real-time search in Drupal. Meet Elasticsearch

Elasticsearch

Flexible and powerful open source, distributed real-time search and analytics engine for the cloud

Page 3: Real-time search in Drupal. Meet Elasticsearch

Elasticsearch

Flexible and powerful open source, distributed real-time search and analytics engine for the cloud

RESTful API on top of Lucene library

Page 4: Real-time search in Drupal. Meet Elasticsearch

Why use Elasticsearch?

Page 5: Real-time search in Drupal. Meet Elasticsearch

● RESTful API● Open Source● JSON over HTTP● based on Lucene● distributed● highly available● schema free● massively scalable

Page 6: Real-time search in Drupal. Meet Elasticsearch

STOP! Why not SOLR?

Page 8: Real-time search in Drupal. Meet Elasticsearch
Page 9: Real-time search in Drupal. Meet Elasticsearch

Setup in 2 steps:

1. Extract the archive2. > bin/elasticsearch

Page 10: Real-time search in Drupal. Meet Elasticsearch

How to use it?

Page 11: Real-time search in Drupal. Meet Elasticsearch

> curl -XGET localhost:9200/?pretty

Page 12: Real-time search in Drupal. Meet Elasticsearch

> curl -XGET localhost:9200/?pretty

{"ok" : true,"status" : 200,"name" : "Infinity","version" : {

"number" : "0.90.1","snapshot_build" : false,"lucene_version" : "4.3"

},"tagline" : "You Know, for Search"

}

Page 13: Real-time search in Drupal. Meet Elasticsearch

> curl -XGET localhost:9200/?pretty

action

Page 14: Real-time search in Drupal. Meet Elasticsearch

> curl -XGET localhost:9200/?pretty

node + port

Page 15: Real-time search in Drupal. Meet Elasticsearch

> curl -XGET localhost:9200/?pretty

path

Page 16: Real-time search in Drupal. Meet Elasticsearch

> curl -XGET localhost:9200/?pretty

query string

Page 17: Real-time search in Drupal. Meet Elasticsearch

Let's index some data

Page 18: Real-time search in Drupal. Meet Elasticsearch

> PUT /index/type/id

Where?It's very similar to database in SQL

Page 19: Real-time search in Drupal. Meet Elasticsearch

> PUT /index/type/id

What?Table

Content type,Entity type,

any kind of type you decide

Page 20: Real-time search in Drupal. Meet Elasticsearch

> PUT /index/type/id

Which?Node ID,Entity ID,

any kind of serial ID

Page 21: Real-time search in Drupal. Meet Elasticsearch

> PUT /mysite/node/1 -d

{"nid": "1","status": "1","title": "Hello elasticsearch","body": "First elasticsearch document"

}

Page 22: Real-time search in Drupal. Meet Elasticsearch

> PUT /mysite/node/1 -d

{"nid": "1","status": "1","title": "Hello elasticsearch","body": "First elasticsearch document"

}

{"ok":true,"_index":"mysite","_type":"node","_id":"1","_version":1

}

Page 23: Real-time search in Drupal. Meet Elasticsearch

Let's GET some data

Page 24: Real-time search in Drupal. Meet Elasticsearch

> GET /mysite/node/1{ "_index" : "mysite", "_type" : "node", "_id" : "1", "_version" : 1, "exists" : true, "_source" : { "nid":"1", "status":"1", "title":"Hello elasticsearch", "body":"First elasticsearch document" }

Page 25: Real-time search in Drupal. Meet Elasticsearch

> GET /mysite/node/1?fields=title,body

Get specific fields

Page 26: Real-time search in Drupal. Meet Elasticsearch

> GET /mysite/node/1?fields=title,body

Get specific fields

> GET /mysite/node/1/_source

Get source only

Page 27: Real-time search in Drupal. Meet Elasticsearch

Let's UPDATE some data

Page 28: Real-time search in Drupal. Meet Elasticsearch

> PUT /mysite/node/1 -d

{"status":"0"

}

Page 29: Real-time search in Drupal. Meet Elasticsearch

> PUT /mysite/node/1 -d

{"ok":true,"_index":"mysite","_type":"node","_id":"1","_version":2

}

{"status":"0"

}

Page 30: Real-time search in Drupal. Meet Elasticsearch

UPDATE = DELETE + PUT

Page 31: Real-time search in Drupal. Meet Elasticsearch

Let's DELETE some data

Page 32: Real-time search in Drupal. Meet Elasticsearch

> DELETE /mysite/node/1

Page 33: Real-time search in Drupal. Meet Elasticsearch

> DELETE /mysite/node/1

{"ok":true,"found":true,"_index":"mysite","_type":"node","_id":"1","_version":3

}

Page 34: Real-time search in Drupal. Meet Elasticsearch

Let's SEARCH for something

Page 35: Real-time search in Drupal. Meet Elasticsearch

> GET /_search

Page 36: Real-time search in Drupal. Meet Elasticsearch

> GET /_search

{"took" : 32,"timed_out" : false,"_shards" : {

"total" : 20,"successful" : 20,"failed" : 0

},"hits" : { results... }

}

Page 37: Real-time search in Drupal. Meet Elasticsearch

Let's SEARCH in multiple indices and types

Page 38: Real-time search in Drupal. Meet Elasticsearch

> GET /index/_search

> GET /index/type/_search

> GET /index1,index2/_search

> GET /myapp_*/type, entity_*/_search

Page 39: Real-time search in Drupal. Meet Elasticsearch

Let's PAGINATE results

Page 40: Real-time search in Drupal. Meet Elasticsearch

> GET /_search?size=10&from=20

size = results per pagefrom = starting from

Page 41: Real-time search in Drupal. Meet Elasticsearch

Let's search oldschool

Page 42: Real-time search in Drupal. Meet Elasticsearch

> GET /_search?q=title:elasticsearch

> GET /_search?q=nid:60

Page 43: Real-time search in Drupal. Meet Elasticsearch

+title:awesome +status:1 +created:>1369917354

Page 44: Real-time search in Drupal. Meet Elasticsearch

?q=title:awesome%20%2Bcreated:>1369917354%20%2Bstatus:1

+title:awesome +status:1 +created:>1369917354

The ugly encoding =)

Page 45: Real-time search in Drupal. Meet Elasticsearch

Query DSL style

Page 46: Real-time search in Drupal. Meet Elasticsearch

> GET /_search -d

{"query": {

"match": "awesome"}

}

Page 47: Real-time search in Drupal. Meet Elasticsearch

> GET /_search -d

{"query": {

"field" : { "title" : { "query" : "+awesome -poor", "boost" : 2.0, }}

}}

Page 48: Real-time search in Drupal. Meet Elasticsearch

Queries & Filters

Page 49: Real-time search in Drupal. Meet Elasticsearch

Queries & Filters

full text search

relevance score

heavy

not cacheable

exact match

show or hide

lightning fast

cacheable

Page 50: Real-time search in Drupal. Meet Elasticsearch

Combine Filters & Queries

Page 51: Real-time search in Drupal. Meet Elasticsearch

> GET /_search -d

{"query": {

"filtered": {"query": {

"match": { "title": "awesome" }},"filter": {

"term": { "type": "article" }}

} }

}

Page 52: Real-time search in Drupal. Meet Elasticsearch

and Sorting

Page 53: Real-time search in Drupal. Meet Elasticsearch

> GET /_search -d

{"query": {

"filtered": {"query": {

"match": { "title": "awesome" }},"filter": {

"term": { "type": "article" }}

} }"sort": {"date":"desc"}

}

Page 54: Real-time search in Drupal. Meet Elasticsearch

and Facets

Page 55: Real-time search in Drupal. Meet Elasticsearch

Facets on Amazon

Page 56: Real-time search in Drupal. Meet Elasticsearch

> GET /_search -d

{"facets": {

"home_team": {"terms": {

"field": "field_home_team"}

}}

}

Page 57: Real-time search in Drupal. Meet Elasticsearch

> GET /_search -d

{"facets": {

"home_team": {"terms": {

"field": "field_home_team"}

}}

}

Give your facet a name

Page 58: Real-time search in Drupal. Meet Elasticsearch

> GET /_search -d

{"facets": {

"home_team": {"terms": {

"field": "field_home_team"}

}}

}

Your facet filter can be:

● Terms● Range● Histogram● Date Histogram● Filter● Query● Statistical● Terms Stats● Geo Distance

Page 59: Real-time search in Drupal. Meet Elasticsearch

"facets" : { "home_team" : { "_type" : "terms", "missing" : 203, "total" : 100, "other" : 42, "terms" : [ { "term" : "hou", "count" : 8 }, { "term" : "sln", "count" : 6 }, ...

Page 60: Real-time search in Drupal. Meet Elasticsearch

STOP! I want this in Drupal?

Page 62: Real-time search in Drupal. Meet Elasticsearch

Development directions:

1. Search API implementation2. Field Storage API

Available modules:elasticsearchSearch API elasticsearch

Page 63: Real-time search in Drupal. Meet Elasticsearch

Field Storage API implementation

Elasticsearch field storage sandbox by Damien TournoudStarted in July 2011

Page 64: Real-time search in Drupal. Meet Elasticsearch

Field Storage API implementation

Elasticsearch field storage sandbox by Damien TournoudStarted in July 2011

Elasticsearch EntityFieldQuery sandbox Commited today! =)

Page 65: Real-time search in Drupal. Meet Elasticsearch

Let's DEMO

Page 66: Real-time search in Drupal. Meet Elasticsearch

Elasticsearch sandbox here:https://drupal.org/sandbox/asgorobets/2073151

Page 67: Real-time search in Drupal. Meet Elasticsearch

Let the Search be with you

Page 68: Real-time search in Drupal. Meet Elasticsearch