Installing the Oracle JDK:
# add-apt-repository ppa:webupd8team/java
# apt-get update
# apt-get install oracle-java9-installer
Multiple Java installations can be installed on one server. You can use the following command to configure which version is the default for use:
# update-alternatives --config java
Install Elasticsearch:
# wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -
# apt-get install apt-transport-https
# echo "deb https://artifacts.elastic.co/packages/5.x/apt stable main" | sudo tee -a /etc/apt/sources.list.d/elastic-5.x.list
# apt-get update && apt-get install elasticsearch
# systemctl daemon-reload
# systemctl enable elasticsearch.service
# systemctl start elasticsearch.service
# vim ~/.bashrc
export JAVA_HOME="/usr/lib/jvm/java-9-oracle"
# echo $JAVA_HOME
/usr/lib/jvm/java-9-oracle
To tail the journal:
# journalctl -f
To list journal entries for the elasticsearch service:
# journalctl --unit elasticsearch
To list journal entries for the elasticsearch service starting from a given time:
# journalctl --unit elasticsearch --since "2017-06-17 15:09:11"
To test Elasticsearch is running:
# curl http://localhost:9200/
Configure Elasticsearch:
# cd /etc/elasticsearch
To check the cluster health:
# curl -X GET 'localhost:9200/_cat/health?v&pretty'
Get a list of nodes in the cluster:
# curl -X GET 'localhost:9200/_cat/nodes?v'
Create the index named "customer":
# curl -X PUT 'localhost:9200/customer?pretty'
List all indices:
# curl -X GET 'localhost:9200/_cat/indices?v'
Add a customer document into the customer index, "external type, with an ID of 1:
# curl -X PUT 'localhost:9200/customer/external/1?pretty&pretty' -H 'Content-Type: application/json' -d'
{
"name": "John Doe"
}
'
Retrieve the document we just added:
# curl -X GET 'localhost:9200/customer/external/1?pretty&pretty'
Replace the document:
# curl -X PUT 'localhost:9200/customer/external/1?pretty&pretty' -H 'Content-Type: application/json' -d'
{
"name": "Jane Doe"
}
'
Update the document:
# curl -X POST 'localhost:9200/customer/external/1/_update?pretty&pretty' -H 'Content-Type: application/json' -d'
{
"doc": { "name": "Jane Doe", "age": 20 }
}
'
Updates can also be performed by using simple scripts:
# curl -X POST 'localhost:9200/customer/external/1/_update?pretty&pretty' -H 'Content-Type: application/json' -d'
{
"script" : "ctx._source.age += 5"
}
'
Note: ctx._source refers to the current source document that is about to be updated.
Bulk insert the multiple documents:
# curl -X POST 'localhost:9200/customer/external/_bulk?pretty&pretty' -H 'Content-Type: application/json' -d'
{"index":{"_id":"1"}}
{"name": "John Doe 3" }
{"index":{"_id":"2"}}
{"name": "Jane Doe 3" }
'
Note: the existing documents will be replaced instead of updated.
Update the first document and delete the second document in one bulk operation:
# curl -X POST 'localhost:9200/customer/external/_bulk?pretty&pretty' -H 'Content-Type: application/json' -d'
{"update":{"_id":"1"}}
{"doc": { "name": "John Doe becomes Jane Doe" } }
{"delete":{"_id":"2"}}
'
Delete a document:
# curl -X DELETE 'localhost:9200/customer/external/1?pretty&pretty'
Delete the customer index:
# curl -X DELETE 'localhost:9200/customer?pretty&pretty'
Load data into the cluster:
# curl -H "Content-Type: application/json" -XPOST 'localhost:9200/bank/account/_bulk?pretty&refresh' --data-binary "@accounts.json"
# curl 'localhost:9200/_cat/indices?v'
Note: the sample data can be generated from http://www.json-generator.com/
Query all documents in the index:
# curl -X GET 'localhost:9200/bank/_search?q=*&sort=account_number:asc&pretty&pretty'
Alternative query method:
# curl -X GET 'localhost:9200/bank/_search?pretty' -H 'Content-Type: application/json' -d'
{
"query": { "match_all": {} },
"sort": [
{ "account_number": "asc" }
]
}
'
Returns all accounts containing the term "mill" or "lane" in the address:
# curl -X GET 'localhost:9200/bank/_search?pretty' -H 'Content-Type: application/json' -d'
{
"query": { "match": { "address": "mill lane" } }
}
'
Returns all accounts containing the phrase "mill lane" in the address:
# curl -X GET 'localhost:9200/bank/_search?pretty' -H 'Content-Type: application/json' -d'
{
"query": { "match_phrase": { "address": "mill lane" } }
}
'
Returns all accounts containing "mill" and "lane" in the address:
# curl -X GET 'localhost:9200/bank/_search?pretty' -H 'Content-Type: application/json' -d'
{
"query": {
"bool": {
"must": [
{ "match": { "address": "mill" } },
{ "match": { "address": "lane" } }
]
}
}
}
'
Returns all accounts containing "mill" or "lane" in the address:
# curl -X GET 'localhost:9200/bank/_search?pretty' -H 'Content-Type: application/json' -d'
{
"query": {
"bool": {
"should": [
{ "match": { "address": "mill" } },
{ "match": { "address": "lane" } }
]
}
}
}
'
Returns all accounts that contain neither "mill" nor "lane" in the address:
# curl -X GET 'localhost:9200/bank/_search?pretty' -H 'Content-Type: application/json' -d'
{
"query": {
"bool": {
"must_not": [
{ "match": { "address": "mill" } },
{ "match": { "address": "lane" } }
]
}
}
}
'
Reference:
https://www.elastic.co/guide/en/elasticsearch/reference/current/deb.html
https://www.elastic.co/guide/en/elasticsearch/reference/current/_delete_an_index.html
https://www.digitalocean.com/community/tutorials/how-to-install-and-configure-elasticsearch-on-ubuntu-16-04