Agregatları hesaplamak istediğim bir ürün kataloğum var. Bu, marka adı, üretici, vb. Gibi en üst düzey özellikler için yeterince basittir. Sorun, birden fazla para biriminde sattığımız için fiyatlardaki aralık sayılarını hesaplamaya çalışmakla birlikte gelir ve bu sayıları belirlerken yalnızca bir para biriminde sorgulamak istiyorum zaman. İşteYuvadaki (ElasticSearch) alt/iç içe geçmiş nesnelerdeki toplam değerler
public class Product
{
public int ID { get; set;}
public string Name { get; set; }
public IList<Price> Prices { get; set; }
}
public class Price
{
public int CurrencyID { get; set; }
public decimal Cost { get; set; }
}
100'ün altındaki bir fiyat ile tüm ürünler için bir sorgusuna bir örnek olduğu: İşte benim ürünü nesnesi haritalama bir örneğidir
var cheapProducts = client.Search<Product>(s => s
.From(0)
.Size(1000)
.Query(q => q
.Range(r => r
.LowerOrEquals(100)
.OnField(f => f.Prices.FirstOrDefault().Cost))));
bu oluşturduğu ElasticSearch istek:
{
"from": 0,
"size": 1000,
"query": {
"range" : {
"prices.cost": {
"lte": "100"
}
}
}
}
Bu, beklediğiniz gibi, tüm ürünleri 100'ün altında en az bir fiyatla herhangi bir para biriminde döndürür. Yapamadığım şey, bu sorguyu belirli bir para birimindeki fiyatlara karşı çalıştırmaktır. Örneğin, sorguya bu filtre ekleyerek sadece para 1'de bir fiyat yok ürünlerini kaldırır: Ben iç içe geçmiş bir nesne ve bir alt nesne hem de fiyatları listesi tedavi denedim
var cheapProducts = client.Search<Product>(s => s
.From(0)
.Size(1000)
.Filter(f => f
.Term(t => t
.Prices.FirstOrDefault().CurrencyID, 1))
.Query(q => q
.Range(r => r
.LowerOrEquals(100)
.OnField(f => f.Prices.FirstOrDefault().Cost))));
ama ElasticSearch "AggregationExecutionException [[iç içe] iç içe yol [fiyatlar] iç içe değil)" hatası ve HasChild sorguları için benzer bir hata aldığım için fiyatları bu şekilde dizine ekliyor görünmüyor. Bu şekilde sorguları ve toplamları üretmek mümkün mü?
onay bu yayını [I Elastik Arama için Nükleer Tehlike müşteri ile iç içe türlerini kullanabilirsiniz nasıl Bundan sonra
, bu sorguyu yürütmek deneyin ] (http://stackoverflow.com/questions/17834767/how-can-i-use-nested-types-with-nest-client-for-elastic-search). Bu, – octavioccl
yardımcı olabilir. Ne yazık ki bu cevap güncel değil gibi görünüyor. En son yanıtta belirtildiği gibi, NestedObject akıcı yöntemi artık işe yaramıyor ve [ElasticProperty (Type = FieldType.Nested]] özniteliğiyle Prices özelliğini dekore etmeye çalıştım ancak Fiyatlar hala endekslenmiyor iç içe bir nesne. Eşlemeyi alabildiysem, fiyatları iç içe geçmiş bir nesne olarak ele almak, yukarıda anlattığım şekilde toplamları hesaplamama izin veriyor mu? –