Elasticsearch::排序给出奇怪的结果
Elasticsearch:: Sorting giving weird results
当我第一次搜索时,它对所有文档进行排序并为我提供前 5 条记录。但是,如果通过更改排序方向(ASC -> DESC)执行相同的搜索查询,则它不会再次对所有文档进行排序,它会给我最后 5 个检索到的文档(来自先前的搜索查询),按降序排列它们,然后给出它还给我。我原以为它会按 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
相同的冗余字段
只需更改 order
键值的大小写即可。
{
"sort": {
"taskid": {
"order": "asc" // or "desc"
}
},
"from": 0,
"size": 5,
"query": {
"filtered": {
"query": {
"match_all": []
}
}
}
}
希望这对您有所帮助..
在elasticsearch中,排序查询是在es中提取结果后进行的。根据您问题中提到的查询,第一个结果根据搜索条件进行过滤,然后对过滤后的结果应用排序。
如果看起来您只是根据数据的旧子集获得结果,则可能是您的新数据尚未编入索引。这在自动化测试中很容易发生,但在手动测试中不太可能发生。
片段每秒都会重建,因此如果这是问题所在,在索引和搜索之间添加大约一秒的 delay/sleep 应该可以解决您的测试。
当我第一次搜索时,它对所有文档进行排序并为我提供前 5 条记录。但是,如果通过更改排序方向(ASC -> DESC)执行相同的搜索查询,则它不会再次对所有文档进行排序,它会给我最后 5 个检索到的文档(来自先前的搜索查询),按降序排列它们,然后给出它还给我。我原以为它会按 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
相同的冗余字段只需更改 order
键值的大小写即可。
{
"sort": {
"taskid": {
"order": "asc" // or "desc"
}
},
"from": 0,
"size": 5,
"query": {
"filtered": {
"query": {
"match_all": []
}
}
}
}
希望这对您有所帮助..
在elasticsearch中,排序查询是在es中提取结果后进行的。根据您问题中提到的查询,第一个结果根据搜索条件进行过滤,然后对过滤后的结果应用排序。
如果看起来您只是根据数据的旧子集获得结果,则可能是您的新数据尚未编入索引。这在自动化测试中很容易发生,但在手动测试中不太可能发生。
片段每秒都会重建,因此如果这是问题所在,在索引和搜索之间添加大约一秒的 delay/sleep 应该可以解决您的测试。