Eirik Ola Aksnes
Your document collection is big!
Scan through all the documents every time you search for something?
Pre-process the documents and create an index!
How well each document matches the query
wget https://download.elasticsearch.org/elasticsearch/release/...
tar -zxvf elasticsearch-2.2.0.tar.gz
cd elasticsearch-2.2.0/bin
./elasticsearch.sh
You can access it at http://localhost:9200 on your web browser, which returns this:
{
"status":200,
"name":"Cypher",
"cluster_name":"elasticsearch",
"version":{
"number":"1.5.2",
"build_hash":"62ff9868b4c8a0c45860bebb259e21980778ab1c",
"build_timestamp":"2015-04-27T09:21:06Z",
"build_snapshot":false,
"lucene_version":"4.10.4"
},
"tagline":"You Know, for Search"
}
JSON documents!
{
"title": "Introduction to Elasticsearch",
"date": "2016-04-07",
"author": "Eirik Ola Aksnes"
}
The act of storing data in Elasticsearch is called indexing.
$curl -X POST localhost:9200/big-one/pizza/1 --data
'{
"name": "California Sunset Chicken"
}'
$curl -X POST localhost:9200/big-one/pizza/2 --data
'{
"name": "American Bacon"
}'
$curl -X POST localhost:9200/big-one/pizza/3 --data
'{
"name": "Classic American"
}'
$curl -X GET localhost:9200/big-one/pizza/1
Result:
{
"_index":"big-one",
"_type":"pizza",
"_id":"1",
"_version":1,
"found":true,
"_source":{
"name":"California Sunset Chicken"
}
}
$curl -X PUT localhost:9200/big-one/pizza/1 --data
'{
"name":"California Sunset Chicken Awesome"
}'
Result:
{
"_index":"big-one",
"_type":"pizza",
"_id":"1",
"_version":2,
"created":false
}
$curl -X DELETE localhost:9200/big-one/pizza/1
Find all the pizzas that contains the word "American"
$curl -X GET localhost:9200/big-one/pizza/_search?q=American
{
"took":4,
"timed_out":false,
"_shards":{
"total":5,
"successful":5,
"failed":0
},
"hits":{
"total":2,
"max_score":0.19178301,
"hits":[
{
"_index":"big-one",
"_type":"pizza",
"_id":"2",
"_score":0.19178301,
"_source":{
"name":"American Bacon"
}
},
{
"_index":"big-one",
"_type":"pizza",
"_id":"3",
"_score":0.19178301,
"_source":{
"name":"Classic American"
}
}
]
}
}
Find the pizzas with a name that contains the word "American"
$curl -XGET localhost:9200/big-one/pizza/_search -d
'{
"query":{
"match":{
"name":"American"
}
}
}'
{
"took": 8,
"timed_out": false,
"_shards": {
"total": 5,
"successful": 5,
"failed": 0
},
"hits": {
"total": 2,
"max_score": 0.19178301,
"hits": [
{
"_index": "big-one",
"_type": "pizza",
"_id": "2",
"_score": 0.19178301,
"_source": {
"name": "American Bacon"
}
},
{
"_index": "big-one",
"_type": "pizza",
"_id": "3",
"_score": 0.19178301,
"_source": {
"name": "Classic American"
}
}
]
}
}
Commonly used in addition to another database...
Github uses Elasticsearch to search 20TB data, including 1.3 billion files and 130 billion code lines
With filtering, aggregations, highlightning, pagination...
Count things and summarize your data, lots of data, often on timestamped data!
Logs > Logstash > Elasticsearch > Kibana