gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 23:42:16 24 4
gpt4 key购买 nike

我需要使用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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com