首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在ElasticSearch中将扫描/滚动与分页和排序一起使用?

如何在ElasticSearch中将扫描/滚动与分页和排序一起使用?
EN

Stack Overflow用户
提问于 2016-01-07 22:33:46
回答 2查看 3.2K关注 0票数 1

我有一个ES DB,用于存储我每天运行的进程的历史记录。因为我希望在历史记录中每页只显示20条记录(按日期排序),所以我使用分页(大小+ from_)组合滚动,它工作得很好。但是,当我想在查询中使用排序时,它不起作用。所以我发现sort滚动不起作用。为了寻找另一种替代方法,我尝试了ES helper扫描,它可以很好地滚动和排序结果,但在这种解决方案中,分页似乎不起作用,我不明白为什么,因为API说扫描会将所有参数发送到底层搜索函数。所以我的问题是,是否有任何方法来组合这三个选项。

谢谢,

鲁本

EN

回答 2

Stack Overflow用户

发布于 2020-03-04 19:21:43

使用elasticsearch.helpers.scan函数时,需要传入preserve_order=True才能启用排序。

(使用elasticsearch==7.5.1测试)

票数 3
EN

Stack Overflow用户

发布于 2016-01-07 23:11:13

是的,您可以将滚动与排序结合使用,但是,当您可以对字符串进行排序时,您将需要更改映射,因为它工作得很好,Documentation Here

为了对字符串字段进行排序,该字段应该只包含一个术语:整个not_analyzed字符串。当然,我们仍然需要对字段进行分析,以便能够将其作为全文进行查询。

以两种方式索引相同字符串的简单方法是在文档中包含两个单独的字段:一个用于搜索分析,另一个用于排序的not_analyzed。

代码语言:javascript
复制
"tweet": { 
    "type":     "string",
    "analyzer": "english",
    "fields": {
        "raw": { 
            "type":  "string",
            "index": "not_analyzed"
        }
    }
}

  • 主要的推文字段与以前一样:一个经过分析的全文字段。
  • 新的tweet.raw子字段为not_analyzed.

现在,或者至少在我们对数据重建索引之后,我们可以使用tweet 字段进行搜索,使用tweet.raw 字段进行排序

代码语言:javascript
复制
GET /_search
    {
        "query": {
            "match": {
                "tweet": "elasticsearch"
            }
        },
        "sort": "tweet.raw"
    }
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34657738

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档