venuktan
venuktan

Reputation: 1659

dynamic mapping for nested type

I have an index/type of test1/all which looks as follows:

{
  "test1": {
     "mappings": {
        "all": {
           "properties": {
              "colors": {
                 "properties": {
                    "H": {"type": "double"},
                    "S": {"type": "long"},
                    "V": {"type": "long"},
                    "color_percent": {"type": "long"}
                 }
              },
              "file_name": {
                 "type": "string"
              },
              "id": {
                 "type": "string"
              },
              "no_of_colors": {
                 "type": "long"
              }
           }
        }
     }
  }
}

I would like to make the colors field nested, I am trying the following :

PUT /test1/all/_mapping
 {
  "mappings":{
          "all":{
              "properties": {
                  "file_name":{
                      "type": "string",
                      "index": "not_analyzed"
                  },
                  "id": {
                      "type": "string",
                      "index": "not_analyzed"
                  },
                  "no_of_colors":{
                  "type":"long",
                  "index": "not_analyzed"
                  },
                  "colors":{
                  "type":"nested",
                  "properties":{
                      "H":{"type":"double"},
                      "S":{"type":"long"},
                      "V":{"type":"long"},
                      "color_percent":{"type":"integer"}
                  }
                  }
              }     
          }
     }
}

But I get the following error:

{
"error": "MapperParsingException[Root type mapping not empty after parsing!
Remaining fields:   [mappings : {all={properties={file_name={type=string, index=not_analyzed}, id={type=string, index=not_analyzed}, no_of_colors={type=integer, index=not_analyzed}, colors={type=nested, properties={H={type=double}, S={type=long}, V={type=long}, color_percent={type=integer}}}}}}]]",
 "status": 400
}

Any suggestions? Appreciate the help.

Upvotes: 1

Views: 637

Answers (1)

Val
Val

Reputation: 217584

You're almost there, you simply need to remove the mappings section like this:

PUT /test1/all/_mapping
{
  "properties": {
    "file_name": {
      "type": "string",
      "index": "not_analyzed"
    },
    "id": {
      "type": "string",
      "index": "not_analyzed"
    },
    "no_of_colors": {
      "type": "long",
      "index": "not_analyzed"
    },
    "colors": {
      "type": "nested",
      "properties": {
        "H": {
          "type": "double"
        },
        "S": {
          "type": "long"
        },
        "V": {
          "type": "long"
        },
        "color_percent": {
          "type": "integer"
        }
      }
    }
  }
}

However, note that this will not work either, because you cannot change the colors type from object to nested and the other string fields from analyzed to _not_analyzed. You need to delete your index and re-create it from scratch

Upvotes: 1

Related Questions