c# - ElasticSearch 6.0.1-SQL DISTINCT子句-NEST C#

标签 c# sql elasticsearch nest

我需要使用NEST从文档中返回所有类别DISTINCTS(无重复)。
在SQL中,它看起来像这样:

SELECT DISTINCT Category  
  FROM Log  
  ORDER BY Category ASC 
在ElasticSearch内部,我这样做:
GET log/_search
{
  "size":"0",
  "aggs" : {
  "alias_category" : {
  "terms" : { "field" : "category.keyword" }
  }
  }
}
我如何使用NEST做到这一点?
public ICollection<string> SelectAllCategoriesDistinct(ElasticClient client)
    {
        var searchResponse = client.Search<LogElasticSearch>(s => s
                                        .Query(q => q
                                            .Terms(t => t
                                                .Field(f => f.Category)
                                            )
                                        )
                                     );
        return (ICollection<string>)searchResponse;
    }

最佳答案

我找到了一种方法。这不是一种优雅的方法,但是我在elastico网站(https://discuss.elastic.co/t/c-nest-best-way-of-accessing-properties-of-iaggregate-object/85384/2)中发现了这种方法:

public ICollection<string> SelectAllCategoriesDistinct(ElasticClient client)
    {
        var searchResponse = 
            client.Search<LogElasticSearch>(s => s
                .Size(0)
                .Aggregations(agg => agg
                    .Terms("categories", t => t
                        .Field("category.keyword")
                    )                  
                )
            );
       
        var aggregation = searchResponse.Aggregations.Values;
        var listOfCategories = new List<string>();

        if (searchResponse.Aggregations.Values.FirstOrDefault().GetType() == typeof(BucketAggregate))
        {
            foreach (IBucket bucket in ((BucketAggregate)aggregation.FirstOrDefault()).Items)
            {
                if (bucket.GetType() == typeof(KeyedBucket<object>))
                {
                    var valueKey = ((KeyedBucket<object>)bucket).Key;
                    listOfCategories.Add(valueKey.ToString());
                }
            } 
        }

        return listOfCategories.OrderBy(c => c).ToList();
    }
如果有人知道一种更好的方法,请帮助我进行改进,但是这样才能达到目标。

关于c# - ElasticSearch 6.0.1-SQL DISTINCT子句-NEST C#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64502783/

相关文章:

c# - WCF 的凭证委托(delegate)问题

c# - 在 C# 中使用字符串作为名称创建对象

sql - 如何在子查询结果上使用MAX()?

elasticsearch - 如何在 ElasticSearch 中进行索引查询?

hadoop - 是否有用于 Elasticsearch 的 Apache Drill 存储插件?

lucene - CustomScore和所有文档的最大值(value)

c# - 使用 .NET 即时生成 visio 图

c# - C++/CLI 应用程序是否比 C# 应用程序更安全?

sql - 使用主键连接大表

具有多个 bool 条件的mysql内连接查询