如何从映射中排除继承的对象属性

时间:2015-06-04 15:29:12

标签: elasticsearch nest

我试图为这样的对象设置映射:

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

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

我使用以下映射代码(客户端为IElasticClient):

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

我得到以下映射结果:

{
"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"
      }
    }
  }
}

当我想进行这样的搜索时,这就成了一个问题:

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

这会导致异常,我猜是因为items对象中的所有字段都不是同一类型。搜索此类型的正确映射是什么?

1 个答案:

答案 0 :(得分:1)

我能够通过使用以下映射来解决这个问题:

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