Plan comme un entier. NEST's automapping déduira un mappage entier pour par défaut
Compte tenu du type suivant
public class Message
{
public int[] Integers { get; set; }
}
AutoMapping ressemblerait
var client = new ElasticClient();
client.CreateIndex("messages", c => c
.Mappings(m => m
.Map<Message>(mm => mm
.AutoMap()
)
)
);
qui produit le mappage suivant
{
"mappings": {
"message": {
"properties": {
"integers": {
"type": "integer"
}
}
}
}
}
Vous pouvez utilisez attribute mapping si vous voulez co explicitement ntrol la cartographie
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()
)
)
);
Ou fluent mapping si vous préférez garder la cartographie séparé de votre Poços
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)
)
)
)
)
);
ou en utilisant le scalar method
client.CreateIndex(messagesIndex, c => c
.Mappings(m => m
.Map<Message>(mm => mm
.AutoMap()
.Properties(p => p
.Scalar(n => n.Integers)
)
)
)
);
Avec la cartographie en place, facettage sur des valeurs entières ressemblerait à
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}");
}
qui donne
1:2
3:2
4:2
5:2
2:1