Search code examples
elasticsearchelasticsearch-mapping

Elasticsearch dynamic type and not_analyse fields


I have created a dynamic template like this, as I have dynamic types:

{
  "template": "test-*", //match any index that starts with 'test-'
  "settings": {
    "number_of_shards": 5
  },
  "mappings": {
    "_default_": {
      "_all": {
        "enabled": false
      },
      "dynamic_templates": [
        {
          "test_id": {
            "match": "test_id", // This is an Array of strings field ["a","b"]
            "mapping": {
              "type": "string",
              "index": "not_analyzed"
            }
          }
        },
        {
          "branch_id": {
            "match": "branch_id", // This is Array of objects field [{"a": "b"}, {"c": "d"}]
            "mapping": {
              "type": "string",
              "index": "not_analyzed"
            }
          }
        }
      ]
    }
  }
}

Example document:

{
  "_index": "test-data13",
  "_type": "025e179ccfd79cacd92f61bb17bddcf8abf83dc2",
  "_id": "847",
  "_version": 1,
  "_score": 1,
  "_source": {
    "test_id": [
      "test_id_test_10123" // disable indexing or full text search for this Array of string
    ],
    "branch_id": [ // disable indexing or full text search for this Array of hashes
      {
        "1": "test_id_test_10123"
      },
      {
        "2": "test_id_test_10124"
      }
    ]
  }
}

How to change this template in such a way that the test_id field and branch_id field, with values should not be indexed or analyzed? Will not_analyzed work if the value is an Array and Array of objects?


Solution

  • Setting index option to no and enabled to false should ensure thattest_id array and branch_id object are not indexed.

    Example:

    {
       "template": "test-*",
       "settings": {
          "number_of_shards": 5
       },
       "mappings": {
          "_default_": {
             "_all": {
                "enabled": false
             },
             "dynamic_templates": [
                {
                   "test_id": {
                      "match": "test_id",
                      "mapping": {
                         "index": "no"
                      }
                   }
                },
                {
                   "branch_id": {
                      "match": "branch_id",
                      "mapping": {
                         "index": "no",
                         "enabled": false
                      }
                   }
                }
             ]
          }
       }
    }