elasticsearch Elasticsearch嵌套库,elasticsearch,nest,elasticsearch,Nest" /> elasticsearch Elasticsearch嵌套库,elasticsearch,nest,elasticsearch,Nest" />

elasticsearch Elasticsearch嵌套库

elasticsearch Elasticsearch嵌套库,elasticsearch,nest,elasticsearch,Nest,我们需要在一个int[1,2,3,4,5,6]数组中创建面。 如果我们将此字段映射为文本,Elasticsearch将抛出一个异常。如果我们将其标记为关键字,则无法获得方面中的所有单个项 如何使用NEST库(版本5)实现这一点 非常感谢将其映射为整数。默认情况下,将为其推断整数映射 给定以下类型 public class Message { public int[] Integers { get; set; } } 自动映射看起来像 var client = new ElasticCl

我们需要在一个int[1,2,3,4,5,6]数组中创建面。 如果我们将此字段映射为文本,Elasticsearch将抛出一个异常。如果我们将其标记为关键字,则无法获得方面中的所有单个项

如何使用NEST库(版本5)实现这一点

非常感谢

将其映射为整数。默认情况下,将为其推断整数映射

给定以下类型

public class Message
{
    public int[] Integers { get; set; }
}
自动映射看起来像

var client = new ElasticClient();

client.CreateIndex("messages", c => c
    .Mappings(m => m
        .Map<Message>(mm => mm
            .AutoMap()
        )
    )
);
client.IndexMany(new[] {
    new Message { Integers = new [] { 1, 2, 3 } },
    new Message { Integers = new [] { 3, 4, 5 } },
    new Message { Integers = new [] { 1, 4, 5 } },
});

client.Refresh(messagesIndex);

var searchResponse = client.Search<Message>(s => s
    .Size(0)
    .Aggregations(a => a
        .Terms("ints", t => t
            .Field(f => f.Integers)
        )
    )
);

foreach (var bucket in searchResponse.Aggs.Terms<int>("ints").Buckets)
{
    Console.WriteLine($"{bucket.Key}:{bucket.DocCount}");
}
如果要显式控制映射,可以使用

public class Message
{
    [Number(NumberType.Integer)]
    public int[] Integers { get; set; }
}
var client = new ElasticClient();

client.CreateIndex("messages", c => c
    .Mappings(m => m
        .Map<Message>(mm => mm
            .AutoMap()
        )
    )
);
client.CreateIndex(messagesIndex, c => c
    .Mappings(m => m
        .Map<Message>(mm => mm
            .AutoMap()
            .Properties(p => p
                .Number(n => n
                    .Name(nn => nn.Integers)
                    .Type(NumberType.Integer)
                )           
            )
        )
    )
);
client.CreateIndex(messagesIndex, c => c
    .Mappings(m => m
        .Map<Message>(mm => mm
            .AutoMap()
            .Properties(p => p
                .Scalar(n => n.Integers)            
            )
        )
    )
);
client.IndexMany(new[] {
    new Message { Integers = new [] { 1, 2, 3 } },
    new Message { Integers = new [] { 3, 4, 5 } },
    new Message { Integers = new [] { 1, 4, 5 } },
});

client.Refresh(messagesIndex);

var searchResponse = client.Search<Message>(s => s
    .Size(0)
    .Aggregations(a => a
        .Terms("ints", t => t
            .Field(f => f.Integers)
        )
    )
);

foreach (var bucket in searchResponse.Aggs.Terms<int>("ints").Buckets)
{
    Console.WriteLine($"{bucket.Key}:{bucket.DocCount}");
}
1:2
3:2
4:2
5:2
2:1