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