Elasticsearch is a search engine based on the Lucene library. It provides a distributed, multitenant-capable full-text search engine with an HTTP web interface and schema-free JSON documents.
I use Kibana Console for Elasticsearch queries. First, we need to create an index called “posts” with the following query:
PUT posts
After we have created the index, we will need to create a mapping for documents. For the “posts” index, we will create a mapping with the following properties:
PUT posts/_mapping/_doc { "properties": { "title": { "type": "keyword" }, "body": { "type": "text" }, "category": { "properties": { "id": { "type": "integer" }, "name": { "type": "keyword" } } } } }
Let’s add some documents to our index.
PUT /posts/_doc/1 { "title": "Hello world!", "body": "Lorem ipsum dolor sit amet", "category": { "id": 1, "name": "Development" } } PUT /posts/_doc/2 { "title": "Good bye world!", "body": "Lorem ipsum dolor sit amet", "category": { "id": 2, "name": "Travel" } } PUT /posts/_doc/3 { "title": "Ruby makes me happy!", "body": "Lorem ipsum dolor sit amet", "category": { "id": 1, "name": "Development" } }
And now we can group documents by category via aggs.
GET /posts/_search { "aggs": { "group_by_category": { "terms": { "field": "category.id", "min_doc_count": 1 }, "aggs": { "point_of_sales": { "top_hits": {} } } } }, "size": 0 }
Here are the results:
{ "took" : 3, "timed_out" : false, "_shards" : { "total" : 5, "successful" : 5, "skipped" : 0, "failed" : 0 }, "hits" : { "total" : 3, "max_score" : 0.0, "hits" : [ ] }, "aggregations" : { "group_by_category" : { "doc_count_error_upper_bound" : 0, "sum_other_doc_count" : 0, "buckets" : [ { "key" : 1, "doc_count" : 2, "point_of_sales" : { "hits" : { "total" : 2, "max_score" : 1.0, "hits" : [ { "_index" : "posts", "_type" : "_doc", "_id" : "1", "_score" : 1.0, "_source" : { "title" : "Hello world!", "body" : "Lorem ipsum dolor sit amet", "category" : { "id" : 1, "name" : "Development" } } }, { "_index" : "posts", "_type" : "_doc", "_id" : "3", "_score" : 1.0, "_source" : { "title" : "Ruby makes me happy!", "body" : "Lorem ipsum dolor sit amet", "category" : { "id" : 1, "name" : "Development" } } } ] } } }, { "key" : 2, "doc_count" : 1, "point_of_sales" : { "hits" : { "total" : 1, "max_score" : 1.0, "hits" : [ { "_index" : "posts", "_type" : "_doc", "_id" : "2", "_score" : 1.0, "_source" : { "title" : "Good bye world!", "body" : "Lorem ipsum dolor sit amet", "category" : { "id" : 2, "name" : "Travel" } } } ] } } } ] } } }
Thanks for having read this post. Soon there will be other posts about Elastic as well. If you like this post, please, share it on social networks.