gpt4 book ai didi

c# - 弹性嵌套将动态值传递给排序

转载 作者:太空宇宙 更新时间:2023-11-03 19:43:59 25 4
gpt4 key购买 nike

我的 Elastic Query 运行良好,我有聚合并在特定字段上进行排序,但如果用户想说按价格排序,我如何动态更改排序字段,而不使用 switch 语句围绕整个查询以选择不同的字段。

我当前的查询:

.Sort(ss => ss
.Field(f => f
.Field(ff => ff.DispatchTimeInDays)
.Order(Nest.SortOrder.Ascending)
)
)

最佳答案

您可以在 Field lambda 表达式中执行此操作

var userInput = "title";

client.Search<Question>(s => s
.Index(Meetup.DefaultIndex)
.Query(q => q
.Match(m => m
.Field(f => f.Title)
.Query("Elasticsearch Kibana")
)
)
.Sort(ss => ss
.Field(f =>
{
f.Order(Nest.SortOrder.Ascending);

switch (userInput)
{
case "body":
f.Field(ff => ff.Body);
break;
case "title":
f.Field(ff => ff.Title);
break;
default:
f.Field("_score");
f.Descending();
break;
}

return f;
})
)
);

您可能希望将其分解到一个方法中,以便流畅的方法调用不会变得笨拙

client.Search<Question>(s => s
.Index(Meetup.DefaultIndex)
.Query(q => q
.Match(m => m
.Field(f => f.Title)
.Query("Elasticsearch Kibana")
)
)
.Sort(ss => ss
.Field(f => SortFromUserInput(f, userInput))
)
);

private IFieldSort SortFromUserInput(SortFieldDescriptor<Question> f, string userInput)
{
f.Order(Nest.SortOrder.Ascending);

switch (userInput)
{
case "body":
f.Field(ff => ff.Body);
break;
case "title":
f.Field(ff => ff.Title);
break;
default:
f.Field("_score");
f.Descending();
break;
}

return f;
}

关于c# - 弹性嵌套将动态值传递给排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48702305/

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