gpt4 book ai didi

java - 如何对具有异常条件的多个字段进行排序

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

我无法使用 FieldSortBuilder 按多个字段排序并执行异常条件。所以我想知道我们可以使用无痛来做到这一点吗?

下面是数据模型。

{ "name" : "string",
"email" : "string",
"schoolNumber" : "number",
"startTime" : "number",
"endTime" : "number",
}

示例:

{ "name" : "Micheal",
"email" : "mi@gmail.com",
"schoolNumber": 1,
"startTime" : 123,
}

{ "name" : "Racheal",
"email" : "ra@gmail.com",
"schoolNumber": 1,
"startTime" : 456,
"endTime" : 789,
}

{ "name" : "Racheal",
"email" : "ra@gmail.com",
"schoolNumber": 2,
"startTime" : 987,
}

只有 endTime 是可选的。我想按 asc 对 startTime 中的所有配置文件进行排序,这些配置文件只有 startTime,endTime 应该处于非 Activity 状态,并且它们应该具有相同的 schoolNumber。

public static final String SORT_SCRIPT =
"if (doc['endTime.raw'].value == null) {
//sort by startTime which have same schoolNumber
} else {
//sort by endTime which have same schoolNumber
}";

另一个解决方案:我想使用 FieldSortBuilder 设置nestedFiler 以排除 endTime

sortBuilder.setNestedFilter(new TermQueryBuilder(LICENSE_ASSIGNMENT_ACTIVATION_TIME_PROPERTY, value:???)

但我不知道如何设置值。我尝试过“null”“false”“ScoreMode.None”。全部失败。

最佳答案

这是我的想法。首先让我向您分享 Elasticsearch 查询如何完成此操作。

请注意,我使用了 Exists Query .

Elasticsearch DSL 请求

POST <your_index_name>/_search
{
"query": {
"bool": {
"must_not": [
{
"exists": {
"field": "endTime"
}
}
]
}
},
"sort": [
{
"startTime": {
"order": "desc"
}
}
]
}

我所做的只是在查询级别执行过滤条件,这意味着使用上述查询,我​​最终只会得到没有endTime的文档,并且在这些文档上实际上对startTime字段执行排序操作。

下面是如何通过 Java API 完成的。

Java API:

SearchRequest searchRequest = new SearchRequest("<your_index_name>");
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
//Exists Query
searchSourceBuilder.query(QueryBuilders.boolQuery().mustNot(QueryBuilders.existsQuery("endTime")));

//Sort Logic
FieldSortBuilder mySort = SortBuilders.fieldSort("startTime").order(SortOrder.DESC);
searchSourceBuilder.sort(mySort);
searchRequest.source(searchSourceBuilder);

请告诉我这是否是您正在寻找的内容!

关于java - 如何对具有异常条件的多个字段进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55698853/

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