当我第一次搜索时,它会对所有文档进行排序并给出前5条记录 . 但是,如果通过更改排序方向(ASC - > DESC)执行相同的搜索查询,那么它不再对所有文档进行排序,它会给我最后5个检索到的文档(来自先前的搜索查询),按照desc顺序对它们进行排序,并给出它回到我身边 . 我期待它将按DESC顺序对所有可用文档进行排序,然后检索前5个结果 .
我做错了什么,或者错过了任何概念 .
我的搜索查询:
{
"sort": {
"taskid": {
"order": "ASC"
}
},
"from": 0,
"size": 5,
"query": {
"filtered": {
"query": {
"match_all": []
}
}
}
}
我有taskid 1到100的数据 . 现在上面的查询在第一次尝试时从taskid 1到5获取了记录 . 现在,当我将排序方向更改为desc时,我希望返回带有taskid 96-100(100,99,98,97,96序列)的文档,但是我返回了带有taskid 5,4,3,2的文档,按顺序排列1 . 这意味着,排序仅在之前返回的结果上完成 .
请注意,我的文档中的taskid和_id是相同的 . 我在映射中添加了一个冗余字段,与_id相同
3 回答
在弹性搜索中,在从es中提取结果之后应用排序查询 . 根据您问题中提到的查询,首先根据搜索条件过滤结果,然后对过滤后的结果应用排序 .
如果看起来您只是根据数据的旧子集获得结果,那么可能是您的新数据尚未编入索引 . 这可以在自动化测试中轻松实现,但通过手动测试则不太可能 .
每秒重建段,因此在索引和搜索之间添加大约一秒的延迟/睡眠应该可以解决您的测试问题 .
只需更改
order
键中值的大小写即可 .希望这可以帮助..