示例-一门学生的考试成绩存储在Elastic搜索索引中。现在,我想找到在该学科中得分最高的前5名学生。
最佳答案
让我通过使用示例来展示它,但是首先要理解这个概念。
首先基于给定的主题(在我的示例中为著名的math
主题:)进行查询,然后将获取所有具有math
主题的学生,之后按照sort
顺序按其desc
排序score
,然后size
参数将结果限制为排名靠前的k
学生。
与答案相关的展示链接:
https://www.elastic.co/guide/en/elasticsearch/reference/6.8/search-request-from-size.html
https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-term-query.html
https://www.elastic.co/guide/en/elasticsearch/reference/6.8/search-request-sort.html
创建一个索引
{
"mappings": {
"properties": {
"sid": {
"type": "integer"
},
"subject" :{
"type" : "keyword"
},
"score" :{
"type" : "integer"
}
}
}
}
为一些文档编制索引
{
"sid" : 1,
"subject" :"math",
"score" : 50
}
{
"sid" : 2,
"subject" :"math",
"score" : 60
}
{
"sid" : 3,
"subject" :"math",
"score" : 70
}
{
"sid" : 4,
"subject" :"math",
"score" : 90
}
{
"sid" : 5,
"subject" :"math",
"score" : 99
}
{
"sid" : 6,
"subject" :"math",
"score" : 100
}
搜索查询以搜索
subject
并基于标记对结果排序并返回前3名学生。{
"sort": [
{
"score": {
"order": "desc" --> define sort order
}
}
],
"query": {
"term": {
"subject": "math"
}
},
"size":3 -->important, you can change it to fetch top K students, Just change 3 to whatever no you want to fetch.
}
搜索查询结果
{
"_index": "leaderboard",
"_type": "_doc",
"_id": "5",
"_score": null,
"_source": {
"sid": 6,
"subject": "math",
"score": 100
},
"sort": [
100
]
},
{
"_index": "leaderboard",
"_type": "_doc",
"_id": "4",
"_score": null,
"_source": {
"sid": 4,
"subject": "math",
"score": 90
},
"sort": [
90
]
},
{
"_index": "leaderboard",
"_type": "_doc",
"_id": "3",
"_score": null,
"_source": {
"sid": 3,
"subject": "math",
"score": 70
},
"sort": [
70
]
}
关于sorting - 如何在Elasticsearch中基于存储的字段值获取前5个文档?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60523449/