- Login into your sandbox
- We have not yet configured elasticsearch service to start automatically, start using terminal window:
sudo service elasticsearch start
- Service will start but listener will take its time before responding to incoming requests:
- Give it few minutes before you get json response
- Post new document:
curl -XPOST localhost:9200/orders/orders/1 \
-H 'content-type: application/json' \
-d '
{
"id": "1",
"placedOn": "2016-10-17T13:03:30.830Z"
}'
curl 'localhost:9200/orders/orders/_mapping?pretty=true'
{
"orders" : {
"mappings" : {
"orders" : {
"properties" : {
"id" : {
"type" : "text",
"fields" : {
"keyword" : {
"type" : "keyword",
"ignore_above" : 256
}
}
},
"placedOn" : {
"type" : "date"
}
}
}
}
}
}
- Try modifying existing mapping:
curl -XPUT 'localhost:9200/orders/_mapping?pretty=true' \
-H 'content-type: application/json' \
-d '
{
"orders" : {
"mappings" : {
"orders" : {
"properties" : {
"id" : {
"type" : "text",
"fields" : {
"keyword" : {
"type" : "keyword",
"ignore_above" : 256
}
}
},
"placedOn" : {
"type" : "date",
"format" : "strict_date_optional_time||epoch_millis"
}
}
}
}
}
}'
- What's the outcome? And why?
- Try modifying existing type mapping:
curl -XPUT 'localhost:9200/orders/orders/_mapping?pretty=mapping' \
-H 'content-type: application/json' \
-d '{
"orders" : {
"mappings" : {
"orders" : {
"properties" : {
"id" : {
"type" : "text",
"fields" : {
"keyword" : {
"type" : "keyword",
"ignore_above" : 256
}
}
},
"placedOn" : {
"type" : "date",
"format" : "strict_date_optional_time||epoch_millis"
}
}
}
}
}
}'
- What now? Why?
- Let us try again:
curl -XPUT 'localhost:9200/orders/orders/_mapping?pretty=mapping' \
-H 'content-type: application/json' \
-d '
{
"orders" : {
"properties" : {
"id" : {
"type" : "text",
"fields" : {
"keyword" : {
"type" : "keyword",
"ignore_above" : 256
}
}
},
"placedOn" : {
"type" : "date",
"format" : "strict_date_optional_time||epoch_millis"
}
}
}
}'
- Did it work? What's the difference?
- Let's modify data type for existing field
curl -XPUT 'localhost:9200/orders/orders/_mapping?pretty=true' \
-H 'content-type: application/json'
-d '
{
"orders" : {
"properties" : {
"id" : {
"type" : "double"
},
"placedOn" : {
"type" : "date",
"format" : "strict_date_optional_time||epoch_millis"
}
}
}
}'
- Seriously, what now? Why? So much for the dynamic data mapping?
- What if we need to change data type after we have indexed the data?
- There is no (more) option to delete the mapping - delete and recreate index is the only option :-(
curl -XDELETE localhost:9200/orders
curl -XPUT localhost:9200/orders
- User json data from the previous step to define the mapping
- Watch out! There is no warning or confirmation using curl!
- Psst: look out for the proper response too: