Elasticsearch 7.17.9多排序字段索引创建失败求助
解决Elasticsearch多字段排序索引创建错误
你的问题出在索引设置的格式上——Elasticsearch不支持将index字段作为数组来配置多字段排序。正确的方式是把sort.field和sort.order分别定义为数组,对应多个排序字段及顺序。
正确的索引创建请求
PUT /my-index { "settings": { "index.sort.field": ["created_at", "id"], "index.sort.order": ["asc", "asc"] }, "mappings": { "properties": { "id": { "type": "keyword", "doc_values": true }, "name": { "type": "keyword" }, "created_at": { "type": "date" } } } }
关键说明
index.sort.field为数组类型,按顺序列出要作为索引默认排序的字段index.sort.order对应每个字段的排序方向,顺序必须和sort.field完全匹配- 要使用
search_after,索引的默认排序必须和搜索时指定的排序规则一致,才能保证分页正确性 id字段设置doc_values: true是正确的,排序功能依赖doc values
Python客户端使用search_after示例
from elasticsearch import Elasticsearch es = Elasticsearch("http://your-es-host:9200") # 首次查询获取初始结果 first_search = es.search( index="my-index", size=10, sort=["created_at:asc", "id:asc"] ) # 提取最后一条文档的排序值,用于下一页查询 last_sort_values = first_search['hits']['hits'][-1]['sort'] # 使用search_after进行分页查询 next_search = es.search( index="my-index", size=10, sort=["created_at:asc", "id:asc"], search_after=last_sort_values )
内容的提问来源于stack exchange,提问作者enchant3dmango
相关产品推荐
相关产品推荐

