Reindexing documents with the Reindex API
Add new index with new mapping
PUT /reviews_new
{
"mappings" : {
"properties" : {
"author" : {
"properties" : {
"email" : {
"type" : "keyword",
"ignore_above" : 256
},
"first_name" : {
"type" : "text"
},
"last_name" : {
"type" : "text"
}
}
},
"content" : {
"type" : "text"
},
"created_at" : {
"type" : "date"
},
"product_id" : {
"type" : "keyword"
},
"rating" : {
"type" : "float"
}
}
}
}
Retrieve mapping
GET /reviews/_mappings
Reindex documents into reviews_new
POST /_reindex
{
"source": {
"index": "reviews"
},
"dest": {
"index": "reviews_new"
}
}
Delete all documents
POST /reviews_new/_delete_by_query
{
"query": {
"match_all": {}
}
}
Convert product_id
values to strings
POST /_reindex
{
"source": {
"index": "reviews"
},
"dest": {
"index": "reviews_new"
},
"script": {
"source": """
if (ctx._source.product_id != null) {
ctx._source.product_id = ctx._source.product_id.toString();
}
"""
}
}
Retrieve documents
GET /reviews_new/_search
{
"query": {
"match_all": {}
}
}
Reindex specific documents
POST /_reindex
{
"source": {
"index": "reviews",
"query": {
"match_all": { }
}
},
"dest": {
"index": "reviews_new"
}
}
Reindex only positive reviews
POST /_reindex
{
"source": {
"index": "reviews",
"query": {
"range": {
"rating": {
"gte": 4.0
}
}
}
},
"dest": {
"index": "reviews_new"
}
}
Removing fields (source filtering)
POST /_reindex
{
"source": {
"index": "reviews",
"_source": ["content", "created_at", "rating"]
},
"dest": {
"index": "reviews_new"
}
}
Changing a field's name
POST /_reindex
{
"source": {
"index": "reviews"
},
"dest": {
"index": "reviews_new"
},
"script": {
"source": """
# Rename "content" field to "comment"
ctx._source.comment = ctx._source.remove("content");
"""
}
}
Ignore reviews with ratings below 4.0
POST /_reindex
{
"source": {
"index": "reviews"
},
"dest": {
"index": "reviews_new"
},
"script": {
"source": """
if (ctx._source.rating < 4.0) {
ctx.op = "noop"; # Can also be set to "delete"
}
"""
}
}