goalie7960
goalie7960

Reputation: 873

How to exclude inherited object properties from mappings

I'm trying to setup a mapping for an object that looks like this:

class TestObject
{
    public long TestID { get; set; }

    [ElasticProperty(Type = FieldType.Object)]
    public Dictionary<long, List<DateTime>> Items { get; set; }
}

I use the following mapping code (where Client is IElasticClient):

this.Client.Map<TestObject>(m => m.MapFromAttributes());

I get the following mapping result:

{
"mappings": {
  "testobject": {
    "properties": {
      "items": {
        "properties": {
          "comparer": {
            "type": "object"
          },
          "count": {
            "type": "integer"
          },
          "item": {
            "type": "date",
            "format": "dateOptionalTime"
          },
          "keys": {
            "properties": {
              "count": {
                "type": "integer"
              }
            }
          },
          "values": {
            "properties": {
              "count": {
                "type": "integer"
              }
            }
          }
        }
      },
      "testID": {
        "type": "long"
      }
    }
  }
}

This becomes a problem when I want to do a search like this:

{
    "query_string": {
        "query": "[2015-06-03T00:00:00.000 TO 2015-06-05T23:59:59.999]",
            "fields": [
                "items.*"
                ]
              }
            }

This causes exceptions, that I guess are because of all the fields in the items object are not of the same type. What is the proper mapping to searches of this type?

Upvotes: 1

Views: 193

Answers (1)

goalie7960
goalie7960

Reputation: 873

I was able to fix this by using the following mapping:

this.Client.Map<TestObject>(m => m.MapFromAttributes())
    .Properties(p => p
        .Object<Dictionary<long, List<DateTime>>>(o => o.Name("items")));

Upvotes: 1

Related Questions