sorting - Elasticsearch:按条件匹配的字段对某些项目进行排序,其他按条件进行排序

标签 sorting elasticsearch

假设我有一个这样映射的文档:

{
  "corp" : {
    "mappings" : {
      "staff" : {
        "properties" : {
          "created" : {
            "type" : "date",
            "format" : "dateOptionalTime"
          },
          "name" : {
            "type" : "string"
          },
          "public" : {
            "type" : "boolean"
          },
          "salary" : {
            "type" : "long"
          }
        }
      }
    }
  }
}

像这样的数据集:
[{"name": "John", "salary": 100000, "public": true, "created": "<datestamp>"},
 {"name": "Bob", "salary": 80000, "public": false, "created": "<datestamp>"},
 {"name": "Wendy", "salary": 110000, "public": true, "created": "<datestamp>"},
 {"name": "Joan", "salary": 210000, "public": false, "created": "<datestamp>"}]

我想构造一个排序,使我们仅在public=true处按薪水排序,然后通过created字段对其余项目进行排序。最终结果应为:

went
  • 约翰
  • Bob(取决于created日期)​​
  • 琼(取决于created日期)​​

  • 这可能吗?

    最佳答案

    应该这样做:

    GET /corp/staff/_search
    {
      "sort": [
        {
          "public": {
            "order": "desc"
          }
        },
        {
          "salary": {
            "order": "asc"
          }
        },
        {
          "created": {
            "order": "asc"
          }
        }
      ]
    }
    

    关于sorting - Elasticsearch:按条件匹配的字段对某些项目进行排序,其他按条件进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30362582/

    相关文章:

    javascript - 任何人都可以解释这种关于数组排序的奇怪行为吗?

    ruby - 比较数组中元素的总和 : Ruby

    java - 就地快速排序

    JavaScript 数组排序通过对相同元素求和

    curl - 不支持内容类型 header [application/x-www-form-urlencoded]

    elasticsearch - 如何在ElasticSearch char_filter中使用多个值映射?

    java - 如何在Elasticsearch中使用RestHighLevelClient获得不同的值?

    ruby-on-rails-3 - 使用cancan授权elasticsearch结果

    javascript - 将innerHTML 片段提取到分组中

    asp.net - 带有 NEST 查询问题的 ElasticSearch