100% found this document useful (2 votes)
438 views

Elasticsearch Basic Concepts

Elasticsearch is an open-source, highly scalable, full-text search and analytics engine. It allows storing, searching, and analyzing large volumes of data quickly and in near real-time. Elasticsearch is based on Apache Lucene and uses RESTful APIs and JSON documents. Many large companies use Elasticsearch for search and analytics on websites, applications, and databases.

Uploaded by

Katarina Carić
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
100% found this document useful (2 votes)
438 views

Elasticsearch Basic Concepts

Elasticsearch is an open-source, highly scalable, full-text search and analytics engine. It allows storing, searching, and analyzing large volumes of data quickly and in near real-time. Elasticsearch is based on Apache Lucene and uses RESTful APIs and JSON documents. Many large companies use Elasticsearch for search and analytics on websites, applications, and databases.

Uploaded by

Katarina Carić
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 25

Elasticsearch

Elasticsearch

Highly scalable open-source full-text search and


analytics engine

Based on Apache LuceneTM

JSON + RESTful

Wikipedia, Stack Overflow, GitHub, SoundCloud, The


Guardian... are using ES

Basic Concepts
Cluster, Nodes
Index, Type, Document, Field
Shards & Replicas
Mapping

Cluster

Indexing

Installing and running


curl -L -O http://download.elasticsearch.org/PATH/TO/VERSION.zip
unzip elasticsearch-$VERSION.zip
cd elasticsearch-$VERSION

Settings: config/elasticsearch.yml (cluster.name, node.name)


./bin/elasticsearch

Info
curl 'http://localhost:9200/?pretty'
{
"status" : 200,
"name" : "katarina_dev",
"cluster_name" : "elasticsearch_kat",
"version" : {
"number" : "1.7.1",
"build_timestamp" : "2015-07-29T09:54:16Z",
"build_snapshot" : false,
"lucene_version" : "4.10.4"
},
"tagline" : "You Know, for Search"
}

Cluster health
GET _cluster/health
{
"cluster_name": "elasticsearch_kat",
"status": "yellow",
"timed_out": false,
"number_of_nodes": 1,
"number_of_data_nodes": 1,
"active_primary_shards": 16,
"active_shards": 16,
"relocating_shards": 0,
"initializing_shards": 0,
"unassigned_shards": 16,
"delayed_unassigned_shards": 0,
"number_of_pending_tasks": 0,
"number_of_in_flight_fetch": 0
}

Sense

Analyzer
curl -X POST "localhost:9200/3a2ilati" -d '
{
"settings": {
"analysis": {
"analyzer": {
"3a2_analyzer": {
"type": "arabic",
"stopwords": [ "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "","","","","","","","","" ,"" ,"" ,"" ],
"tokenizer": "whitespace",
}
}
}
},
"mappings": {
"articles": {
"_all": {
"analyzer": "3a2_analyzer"
},
"include_in_all": false,
"properties": {
"id": {
"type": "long",
"index": "not_analyzed"
},
"short_title": {
"type": "string",
"analyzer": "3a2_analyzer"
},
"meta_keywords": {
"type": "string",
"enabled": false
},.....

Insert data
PUT /website/blog/123
{
"title": "My first blog entry",
"text": "Just trying this out...",
"date": "2015/09/09"
}
response:
{
"_index":
"_type":
"_id":
"_version":
"created":
}

"website",
"blog",
"123",
1,
true

Get data
GET /website/blog/123?pretty
{
"_index" :
"_type" :
"_id" :
"_version" :
"found" :
"_source" :
"title":
"text":
"date":
}

"website",
"blog",
"123",
1,
true,
{
"My first blog entry",
"Just trying this out...",
"2015/09/09"

}
part of a document: GET /website/blog/123?_source=title,text
just source: GET /website/blog/123/_source

Multi-index, Multitype
/_search
Search all types in all indices
/gb/_search
Search all types in the gb index
/gb,us/_search
Search all types in the gb and us indices
/g*,u*/_search
Search all types in any indices beginning with g or beginning with u
/gb/user/_search
Search type user in the gb index
/gb,us/user,tweet/_search
Search types user and tweet in the gb and us indices
/_all/user,tweet/_search
Search types user and tweet in all indices

Search Lite
query-string version that expects all its parameters to be passed in the query string

GET /website/blog/_search
GET /website/blog /_search?q=title:elasticsearch

Search with Query DSL


The domain-specific language (DSL) is specified using a JSON request body
GET /website/blog/_search
{
"match" : {
"title" : "elasticsearch"
}
}

Validate query
GET /website/blog/_validate/query?explain

Filters
GET /megacorp/employee/_search
{
"query" : {
"filtered" : {
"filter" : {
"range" : {
"age" : { "gt" : 30 }
}
},
"query" : {
"match" : {
"last_name" : "smith"
}
}
}
}
}

Full-Text Search
GET /megacorp/employee/_search
{
"query" : {
"match" : {
"about" : "rock climbing"
}
}
}

Phrase Search
GET /megacorp/employee/_search
{
"query" : {
"match_phrase" : {
"about" : "rock climbing"
}
}
}

Highlighting
GET /megacorp/employee/_search
{
"query" : {
"match_phrase" : {
"about" : "rock climbing"
}
},
"highlight": {
"fields" : {
"about" : {}
}
}
}

Bool Queries
Occurrence types:
must
should
must_not
GET /my_index/my_type/_search
{
"query": {
"bool": {
"should": [
{ "match": { "title":
{ "match": { "title":
{ "match": { "title":
],
"minimum_should_match":
}
}
}

"brown" }},
"fox"
}},
"dog"
}}
2

Combining Queries
GET /my_index/my_type/_search
{
"query": {
"bool": {
"must":
{ "match":
"must_not": { "match":
"should": [
{ "match":
{ "match":
]
}
}
}

{ "title": "quick" }},


{ "title": "lazy" }},
{ "title": "brown" }},
{ "title": "dog"
}}

Bulk API
{action_and_meta_data}\n
{optional_data_source}\n
{action_and_meta_data}\n
{optional_data_source}\n

Actions:

create (Create a document only if the document does not already exist)
index (Create a new document or replace an existing document)
update (Do a partial update on a document)
delete (Delete a document)

Import some data


https://www.elastic.co/guide/en/kibana/3.0/import-some-data.html
https://www.elastic.co/guide/en/kibana/3.0/snippets/shakespeare.json
curl -XPUT localhost:9200/_bulk --data-binary @shakespeare.json

You might also like