我有一个ES DB,用于存储我每天运行的进程的历史记录。因为我希望在历史记录中每页只显示20条记录(按日期排序),所以我使用分页(大小+ from_)组合滚动,它工作得很好。但是,当我想在查询中使用排序时,它不起作用。所以我发现sort滚动不起作用。为了寻找另一种替代方法,我尝试了ES helper扫描,它可以很好地滚动和排序结果,但在这种解决方案中,分页似乎不起作用,我不明白为什么,因为API说扫描会将所有参数发送到底层搜索函数。所以我的问题是,是否有任何方法来组合这三个选项。
谢谢,
鲁本
发布于 2020-03-04 19:21:43
使用elasticsearch.helpers.scan函数时,需要传入preserve_order=True才能启用排序。
(使用elasticsearch==7.5.1测试)
发布于 2016-01-07 23:11:13
是的,您可以将滚动与排序结合使用,但是,当您可以对字符串进行排序时,您将需要更改映射,因为它工作得很好,Documentation Here
为了对字符串字段进行排序,该字段应该只包含一个术语:整个not_analyzed字符串。当然,我们仍然需要对字段进行分析,以便能够将其作为全文进行查询。
以两种方式索引相同字符串的简单方法是在文档中包含两个单独的字段:一个用于搜索分析,另一个用于排序的not_analyzed。
"tweet": {
"type": "string",
"analyzer": "english",
"fields": {
"raw": {
"type": "string",
"index": "not_analyzed"
}
}
}现在,或者至少在我们对数据重建索引之后,我们可以使用tweet 字段进行搜索,使用tweet.raw 字段进行排序
GET /_search
{
"query": {
"match": {
"tweet": "elasticsearch"
}
},
"sort": "tweet.raw"
}https://stackoverflow.com/questions/34657738
复制相似问题