NEST(ELASTICSEARCH)搜索响应降低聚合



这是一个在elasticsearch中起作用的查询。

   "query":{
      "match_all":{
      }
   },
   "size":20,
   "aggs":{
      "CompanyName.raw":{
         "terms":{
            "field":"CompanyName.raw",
            "size":20,
            "order":{
               "_count":"desc"
            }
         }
      }
   }
}

Elasticsearch的响应具有属性aggregations['CompanyName.raw']['buckets'],它是一个数组。

我使用此代码通过Nest

来驱动相同的查询
                string responseJson = null;
                ISearchResponse<ProductPurchasing> r =  Client.Search<ProductPurchasing>(rq);
                using (MemoryStream ms = new MemoryStream())
                {
                    Client.RequestResponseSerializer.Serialize<ISearchResponse<ProductPurchasing>>(r, ms);
                    ms.Position = 0;
                    using (StreamReader sr = new StreamReader(ms))
                    {
                        responseJson = sr.ReadToEnd();
                    }
                }

但是,在结果的responseJson中,此数组始终为空。

HS它去了哪里?我该如何拿回来?还是巢不支持聚集?

nest确实支持聚合,您可以查看文档如何使用Nest帮助处理聚合响应。

在这里,您可以找到一个简短的编写和从简单术语中检索数据的示例:

class Program
{
    public class Document
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public string Brand { get; set; }
        public string Category { get; set; }
        public override string ToString() => $"Id: {Id} Name: {Name} Brand: {Brand} Category: {Category}";
    }
    static async Task Main(string[] args)
    {
        var pool = new SingleNodeConnectionPool(new Uri("http://localhost:9200"));
        var connectionSettings = new ConnectionSettings(pool);
        connectionSettings.DefaultIndex("documents");
        var client = new ElasticClient(connectionSettings);
        var deleteIndexResponse = await client.Indices.DeleteAsync("documents");
        var createIndexResponse = await client.Indices.CreateAsync("documents", d => d
            .Map(m => m.AutoMap<Document>()));
        var indexDocument = await client
            .IndexDocumentAsync(new Document {Id = 1, Brand = "Tommy", Category = "men"});
        var indexDocument2 = await client
            .IndexDocumentAsync(new Document {Id = 2, Brand = "Diesel", Category = "men"});
        var indexDocument3 = await client
            .IndexDocumentAsync(new Document {Id = 3, Brand = "Boss", Category = "men"});
        var refreshAsync = client.Indices.RefreshAsync();
        var searchResponse = await client.SearchAsync<Document>(s => s
            .Query(q => q.MatchAll())
            .Aggregations(a => a
                .Terms("brand", t => t
                    .Field(f => f.Brand.Suffix("keyword")))));
        var brands = searchResponse.Aggregations.Terms("brand");
        foreach (var bucket in brands.Buckets)
        {
            Console.WriteLine(bucket.Key);
        }
    }
}

打印:

Boss
Diesel
Tommy

希望会有所帮助。

最新更新