Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Recreation of mapping elastic search

logstash configI have created my index on elasticsearch and through kibana as well and have uploaded data. Now i want to change the mapping for the index and change some fields to not analyzed .Below is my mapping which i want to replace from existing one . But when i run below command it gives me error

{"error":{"root_cause":[{"type":"index_already_exists_exception","reason":"already exists","index":"rettrmt"}],"type":"index_already_exists_exception","reason":"already exists","index":"rettrmt"},"status":400}

Kindly help to get it close.

curl -XPUT 'http://10.56.139.61:9200/rettrmt' -d '{
  "rettrmt": {
    "aliases": {},
    "mappings": {
      "RETTRMT": {
        "properties": {
          "@timestamp": {
            "type": "date",
            "format": "strict_date_optional_time||epoch_millis"
          },
          "@version": {
            "type": "string"
          },
          "acid": {
            "type": "string"
          },
          "actor_id": {
            "type": "string",
            "index": "not_analyzed"
          },
          "actor_type": {
            "type": "string",
            "index": "not_analyzed"
          },
          "channel_id": {
            "type": "string",
            "index": "not_analyzed"
          },
          "circle": {
            "type": "string",
            "index": "not_analyzed"
          },
          "cr_dr_indicator": {
            "type": "string",
            "index": "not_analyzed"
          },
          "host": {
            "type": "string"
          },
          "message": {
            "type": "string"
          },
          "orig_input_amt": {
            "type": "double"
          },
          "path": {
            "type": "string"
          },
          "r_cre_id": {
            "type": "string"
          },
          "sub_use_case": {
            "type": "string",
            "index": "not_analyzed"
          },
          "tran_amt": {
            "type": "double"
          },
          "tran_id": {
            "type": "string"
          },
          "tran_particulars": {
            "type": "string"
          },
          "tran_particulars_2": {
            "type": "string"
          },
          "tran_remarks": {
            "type": "string"
          },
          "tran_sub_type": {
            "type": "string"
          },
          "tran_timestamp": {
            "type": "date",
            "format": "strict_date_optional_time||epoch_millis"
          },
          "tran_type": {
            "type": "string"
          },
          "type": {
            "type": "string"
          },
          "use_case": {
            "type": "string",
            "index": "not_analyzed"
          }
        }
      }
    },
    "settings": {
      "index": {
        "creation_date": "1457331693603",
        "uuid": "2bR0yOQtSqqVUb8lVE2dUA",
        "number_of_replicas": "1",
        "number_of_shards": "5",
        "version": {
          "created": "2000099"
        }
      }
    },
    "warmers": {}
  }
}'
like image 306
siddhartha jain Avatar asked Mar 07 '16 07:03

siddhartha jain


People also ask

What is mapping in Elasticsearch?

Mapping is the process of defining how a document, and the fields it contains, are stored and indexed. Each document is a collection of fields, which each have their own data type. When mapping your data, you create a mapping definition, which contains a list of fields that are pertinent to the document.

Can I change mapping for existing index Elasticsearch?

Notes. It is not possible to update the mapping of an existing field. If the mapping is set to the wrong type, re-creating the index with updated mapping and re-indexing is the only option available. In version 7.0, Elasticsearch has deprecated the document type and the default document type is set to _doc.

How do I enable dynamic mapping in Elasticsearch?

You enable dynamic mapping by setting the dynamic parameter to true or runtime . You can then use dynamic templates to define custom mappings that can be applied to dynamically added fields based on the matching condition: match_mapping_type operates on the data type that Elasticsearch detects.


2 Answers

You first need to delete your index and then recreate it with the proper mapping. Here you're getting an error index_already_exists_exception because you try to create an index while the older index still exists, hence the conflict.

Run this first:

curl -XDELETE 'http://10.56.139.61:9200/rettrmt'

And then you can run your command again. Note that this will erase your data, so you will have to repopulate your index.

like image 90
Val Avatar answered Nov 15 '22 09:11

Val


Did you try something like that ?

curl -XPUT 'http://10.56.139.61:9200/rettrmt/_mapping/RETTRMT' -d '
{
  "properties": {
    "actor_id": { // or whichever properties you want to add
            "type": "string",
            "index": "not_analyzed"
    }
  }
}

works for me

like image 31
Swan Jml Avatar answered Nov 15 '22 09:11

Swan Jml