gpt4 book ai didi

elasticsearch - NEST elastic sort by filtered 嵌套文档

转载 作者:行者123 更新时间:2023-12-05 05:12:08 25 4
gpt4 key购买 nike

我很难将弹性查询转换为 C# Nest 等价物。

这是我的弹性查询

   "from":0,
"size":15,
"sort":[
{
"tags.date" :{
"order" : "desc",
"nested" : {
"path" : "tags",
"filter" : {
"term" : {"tags.id" : 1}
}
}
}

}
],

当我用 C# Nest 6.2.0 尝试这个时

        .Fomm(0)
.Size(15)
.Sort(s => s
.Descending(sdf => sdf.Tags.First().Date)
.Field(ff => ff
.Nested(nstd => nstd
.Path(nsp => nsp.Tags)
.Filter(f2 => f2
.Term(sft => sft
.Field(a1 => a1
.Tags.First().Id)
.Value(1)
)
)
)
)
)

它产生

   "from":0,
"size":15,
"sort":[
{
"tags.date":{
"order":"desc"
}
}
],

我怎样才能让它对嵌套文档应用过滤器?我在这里错过了什么?

最佳答案

嵌套排序的排序顺序和目标字段需要在嵌套排序调用中。例如,给定以下模型

public class Person 
{
public IEnumerable<Tag> Tags {get;set;}
}

public class Tag
{
public int Id {get;set;}
public DateTime Date {get;set;}
}

这看起来像

var client = new ElasticClient(settings);

var searchResponse = client.Search<Person>(s => s
.From(0)
.Size(15)
.Sort(so => so
.Field(f => f
.Field(ff => ff.Tags.First().Date)
.Order(Nest.SortOrder.Descending)
.Nested(n => n
.Path(p => p.Tags)
.Filter(fi => fi
.Term(sft => sft
.Field(ff => ff.Tags.First().Id)
.Value(1)
)
)
)
)
)
);

产生

{
"from": 0,
"size": 15,
"sort": [
{
"tags.date": {
"nested": {
"filter": {
"term": {
"tags.id": {
"value": 1
}
}
},
"path": "tags"
},
"order": "desc"
}
}
]
}

关于elasticsearch - NEST elastic sort by filtered 嵌套文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54863624/

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