【问题标题】:Sort based on length of an array in elasticsearch根据elasticsearch中数组的长度排序
【发布时间】:2015-11-27 12:46:29
【问题描述】:

有一个字段存储了一个数组。我想根据该字段的数组长度对文档进行排序。

示例文档

document 1 = {
"countryCodes" : ["US","UK","UA","IN"]
}

document 2 ={
"countryCodes" : ["FR","SU","UG","UK","US"]
}

所以,在排序上,结果应该首先显示文档 2,然后是文档 1。

【问题讨论】:

    标签: sorting elasticsearch


    【解决方案1】:

    对于 Elasticsearch 5.6.7 查询应如下所示:

    GET index/_search
    {
        "query": {
            "match_all": {}
        },
        "sort": {
            "_script": {
                "type" : "number",
                "script" : {
                    "lang": "painless",
                    "source": "doc.countryCodes.values.size()"
                },
                "order" : "desc"
            }
        }
    }
    

    【讨论】:

      【解决方案2】:

      这里有两个选项。

      1. 在映射中使用标记计数类型作为多字段 - 这样另一个字段将被存储为具有数组长度的多字段。您可以通过here了解更多信息。
      2. 脚本 - 也可以使用脚本来实现。

        { “种类”: { “_脚本”: { “脚本”:“doc['countryCodes'].values.size()” } } }

      【讨论】:

        【解决方案3】:

        最简单的方法是同时索引另一个包含数组长度的字段,然后对该字段进行排序。

        另一种方法是使用 script-based sorting 并使用 groovy 返回数组的长度。

        {
          "query": {
            "match_all": {}
          },
          "sort": {
            "_script": {
              "script": "doc.countryCodes.values.size()"
            }
          }
        }
        

        还要确保enable dynamic scripting 才能正常工作。

        【讨论】:

          【解决方案4】:

          对于 Elasticsearch 6.8,查询应如下所示:

          {
             "query": {
                "match_all": {}
             },
             "sort": {
                "_script": {
                   "type": "number",
                   "script": "doc.countryCodes.size()",
                   "order": "desc"
                }
             }
          }
          

          【讨论】:

            猜你喜欢
            • 2021-11-20
            • 2017-04-02
            • 1970-01-01
            • 2013-11-05
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2015-06-29
            相关资源
            最近更新 更多