Yanick Rochon
Yanick Rochon

Reputation: 53546

ElasticSearch create an index with dynamic properties

Is it possible to create an index, restricting indexing a parent property?

For example,

$ curl -XPOST 'http://localhost:9200/actions/action/' -d '{
  "user": "kimchy",
  "message": "trying out Elasticsearch",
  "actionHistory": [
    { "timestamp": 123456789, "action": "foo" },
    { "timestamp": 123456790, "action": "bar" },
    { "timestamp": 123456791, "action": "buz" },
    ...
  ]
}'

I don't want actionHistory to be indexed at all. How can this be done?

For the above document, I believe the index would be created as

$ curl -XPOST localhost:9200/actions -d '{
  "settings": {
    "number_of_shards": 1
  },
  "mappings": {
    "action": {
      "properties" : {
        "user": { "type": "string", "index" : "analyzed" },
        "message": { "type": "string": "index": "analyzed" },
        "actionHistory": {
          "properties": {
            "timestamp": { 
              "type": "date", 
              "format": "strict_date_optional_time||epoch_millis"
            },
            "action": { "type": "string", "index": "analyzed" }
          }
        }
      }
    }
  }
}'

Would removing properties from actionHistory and replace it with "index": "no" be the proper solution?

This is an example, however my actual situation are documents with dynamic properties (i.e. actionHistory contains various custom, non-repeating properties across all documents) and my mapping definition for this particular type has over 2000 different properties, making searches extremely slow (i.e. worst than full text search from the database).

Upvotes: 0

Views: 582

Answers (1)

Val
Val

Reputation: 217334

You can probably get away by using dynamic templates, match on all actionHistory sub-fields and set "index": "no" for all of them.

PUT actions
{
  "mappings": {
    "action": {
      "dynamic_templates": [
        {
          "actionHistoryRule": {
            "path_match":   "actionHistory.*",
            "mapping": {
              "type": "{dynamic_type}",
              "index": "no"
            }
          }
        }
      ]
    }
  }
}

Upvotes: 1

Related Questions