如何使用异常条件对多个字段进行排序

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使用异常条件对多个字段进行排序相关的知识,希望对你有一定的参考价值。

我不能使用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应该处于非活动状态,并且它们应该具有相同的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);

如果您正在寻找,请告诉我们!

以上是关于如何使用异常条件对多个字段进行排序的主要内容,如果未能解决你的问题,请参考以下文章

如何使用简单的管理对列表中的多个字段进行排序?

如何按多个字段对对象数组进行排序?

mysql 对符合条件的字段进行排序

21《MySQL 教程》ORDER BY 排序

如何按值和键的多个条件对嵌套字典进行排序?

使用多个排序条件对数组进行排序 (QuickSort)