.Net Nest 中的 ElasticSearch 过滤器聚合
ElasticSearch Filter Aggregation in .Net Nest
我正在尝试 运行 通过 Nest 2.3.2 针对 ElasticSearch 进行以下 Filter Aggregation 查询。
GET workitems_v2/mail/_search
{
size:0,
"aggs" : {
"AutoComplete" : {
"filter" : { "match": { "claimData.claimOwner":"dav" } },
"aggs": {
"Suggestions": {
"terms": {"field":"claimData.claimOwner.raw"}
}
}
}
}
}
这是我在 Nest 中的内容 (VB.Net) - 请注意第二个 Aggregations() 函数是 Filter() 函数的子函数。
Dim queryResults = elasticClient.Search(Of Mail)(Function(s) s.
Size(0).
Aggregations(Function(a) a.
Filter("AutoComplete", Function(f) f.
Filter(Function(ff) ff.
Match(Function(m) m.
Field("claimData.claimOwner").
Query("dav")
)
).
Aggregations(Function(aa) a.
Terms("Suggestions", Function(t) t.
Field("claimData.claimOwner.raw")
)
)
)
)
)
但是 Nest 生成的查询看起来像:
POST /workitems_v2/mail/_search
{
"size" : 0,
"aggs" : {
"Suggestions" : {
"terms" : {
"field" : "claimData.claimOwner.raw"
}
},
"AutoComplete" : {
"filter" : {
"match" : {
"claimData.claimOwner" : {
"query" : "dav"
}
}
}
}
}
}
...这没有给我想要的东西。我如何告诉 Nest "Suggestions" 聚合是第一个过滤器聚合的一部分?
您的查询不完全正确;子聚合应该使用 AggregationContainerDescriptor<T>
作为参数传递给匿名函数
中的 aa
Dim queryResults = elasticClient.Search(Of Mail)(Function(s) s.
Size(0).
Aggregations(Function(a) a.
Filter("AutoComplete", Function(f) f.
Filter(Function(ff) ff.
Match(Function(m) m.
Field("claimData.claimOwner").
Query("dav")
)
).
Aggregations(Function(aa) aa.
Terms("Suggestions", Function(t) t.
Field("claimData.claimOwner.raw")
)
)
)
)
这导致
{
"size": 0,
"aggs": {
"AutoComplete": {
"filter": {
"match": {
"claimData.claimOwner": {
"query": "dav"
}
}
},
"aggs": {
"Suggestions": {
"terms": {
"field": "claimData.claimOwner.raw"
}
}
}
}
}
}
我正在尝试 运行 通过 Nest 2.3.2 针对 ElasticSearch 进行以下 Filter Aggregation 查询。
GET workitems_v2/mail/_search
{
size:0,
"aggs" : {
"AutoComplete" : {
"filter" : { "match": { "claimData.claimOwner":"dav" } },
"aggs": {
"Suggestions": {
"terms": {"field":"claimData.claimOwner.raw"}
}
}
}
}
}
这是我在 Nest 中的内容 (VB.Net) - 请注意第二个 Aggregations() 函数是 Filter() 函数的子函数。
Dim queryResults = elasticClient.Search(Of Mail)(Function(s) s.
Size(0).
Aggregations(Function(a) a.
Filter("AutoComplete", Function(f) f.
Filter(Function(ff) ff.
Match(Function(m) m.
Field("claimData.claimOwner").
Query("dav")
)
).
Aggregations(Function(aa) a.
Terms("Suggestions", Function(t) t.
Field("claimData.claimOwner.raw")
)
)
)
)
)
但是 Nest 生成的查询看起来像:
POST /workitems_v2/mail/_search
{
"size" : 0,
"aggs" : {
"Suggestions" : {
"terms" : {
"field" : "claimData.claimOwner.raw"
}
},
"AutoComplete" : {
"filter" : {
"match" : {
"claimData.claimOwner" : {
"query" : "dav"
}
}
}
}
}
}
...这没有给我想要的东西。我如何告诉 Nest "Suggestions" 聚合是第一个过滤器聚合的一部分?
您的查询不完全正确;子聚合应该使用 AggregationContainerDescriptor<T>
作为参数传递给匿名函数
aa
Dim queryResults = elasticClient.Search(Of Mail)(Function(s) s.
Size(0).
Aggregations(Function(a) a.
Filter("AutoComplete", Function(f) f.
Filter(Function(ff) ff.
Match(Function(m) m.
Field("claimData.claimOwner").
Query("dav")
)
).
Aggregations(Function(aa) aa.
Terms("Suggestions", Function(t) t.
Field("claimData.claimOwner.raw")
)
)
)
)
这导致
{
"size": 0,
"aggs": {
"AutoComplete": {
"filter": {
"match": {
"claimData.claimOwner": {
"query": "dav"
}
}
},
"aggs": {
"Suggestions": {
"terms": {
"field": "claimData.claimOwner.raw"
}
}
}
}
}
}