NEST aggs集合是只读的

时间:2017-02-03 12:39:00

标签: elasticsearch nest

我使用NEST客户端使用以下语法:

 _server.Search<Document>(s => s.Index(_config.SearchIndex)
.Query(q => q.MatchAll(p => p)).Aggregations(
    a => a
    .Terms("type", st => st
        .Field(p => p.Type)
    )));

但是我一直收到以下异常

  A first chance exception of type 'System.NotSupportedException' occurred in mscorlib.dll

  Additional information: Collection is read-only.

似乎只有在我使用聚合时才会发生,Type的字段具有以下映射:

  [Keyword(Name = "Type")]
    public string Type { get; set; }

1 个答案:

答案 0 :(得分:0)

我会仔细检查你正在使用的NEST和Elasticsearch.Net的版本。我刚刚使用Elasticsearch 5.1.2和NEST 5.0.1尝试了以下示例,并且没有看到问题

void Main()
{
    var pool = new SingleNodeConnectionPool(new Uri("http://localhost:9200"));
    var defaultIndex = "default-index";
    var connectionSettings = new ConnectionSettings(pool)
            .DefaultIndex(defaultIndex);

    var client = new ElasticClient(connectionSettings);

    if (client.IndexExists(defaultIndex).Exists)
        client.DeleteIndex(defaultIndex);

    client.CreateIndex(defaultIndex, c => c
        .Mappings(m => m
            .Map<Document>(mm => mm.AutoMap())
        )   
    );

    var documents = Enumerable.Range(1, 100).Select(i =>
        new Document
        {
            Type = $"Type {i % 5}"
        }
    );

    client.IndexMany(documents);

    client.Refresh(defaultIndex);

    var searchResponse = client.Search<Document>(s => s
        .Index(defaultIndex)
        .Query(q => q.MatchAll(p => p))
        .Aggregations(a => a
            .Terms("type", st => st
                .Field(p => p.Type)
            )
        )
    );

    foreach (var bucket in searchResponse.Aggs.Terms("type").Buckets)
        Console.WriteLine($"key: {bucket.Key}, count {bucket.DocCount}");
}

public class Document
{
    [Keyword(Name = "Type")]
    public string Type { get; set; }
}

此输出

key: Type 0, count 20
key: Type 1, count 20
key: Type 2, count 20
key: Type 3, count 20
key: Type 4, count 20