问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

Elasticsearch最新排序技巧揭秘

创作时间:
作者:
@小白创作中心

Elasticsearch最新排序技巧揭秘

引用
CSDN
6
来源
1.
https://blog.csdn.net/qq_50790981/article/details/140080792
2.
https://elastic.ac.cn/guide/en/elasticsearch/reference/current/index-modules-index-sorting.html
3.
https://www.elastic.co/guide/en/elasticsearch/reference/current/documents-indices.html
4.
https://www.bookstack.cn/read/elasticsearch-7.17-en/a83ef7e8b0a61ee2.md
5.
https://www.elastic.co/guide/en/elasticsearch/reference/current/mapping.html
6.
https://www.elastic.co/guide/en/elasticsearch/reference/current/es-ingestion-overview.html

在Elasticsearch中,keyword类型的字段主要用于精确匹配和聚合操作,虽然它不直接支持数值范围查询,但可以用于排序。以下是如何对keyword类型字段进行排序的方法:

对单值keyword字段排序

如果keyword字段只包含单一值,你可以直接在搜索请求中使用sort参数对其进行排序:

GET /my_index/_search
{
  "query": {
    "match_all": {}
  },
  "sort": [
    {
      "my_keyword_field": {
        "order": "asc"  // 或 "desc"
      }
    }
  ]
}

对多值keyword字段排序

keyword字段包含多个值时,需要指定如何选择一个值来进行排序。这可以通过mode参数实现,常见的模式有minmaxavg等:

GET /my_index/_search
{
  "query": {
    "match_all": {}
  },
  "sort": [
    {
      "my_keyword_field": {
        "order": "asc",
        "mode": "min"  // 可选:min, max, avg 等
      }
    }
  ]
}

数字格式的keyword字段排序

即使keyword字段存储的是数字(如ID),也可以按上述方法进行排序。但由于其内部以字符串形式存储,可能会导致自然顺序问题(例如,“10”会在“2”之前)。为避免这种情况,可以在索引映射中将该字段同时定义为longkeyword类型:

PUT /my_index
{
  "mappings": {
    "properties": {
      "numeric_keyword_field": {
        "type": "keyword",
        "fields": {
          "as_long": {
            "type": "long"
          }
        }
      }
    }
  }
}

然后通过numeric_keyword_field.as_long进行排序。

总结来说,尽管keyword类型主要用于文本数据,但通过合理配置和灵活运用排序选项,同样能够满足对数字或复杂值的排序需求。

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号