Как получить 5 лучших документов на основе значения сохраненного поля вasticsearch? - PullRequest
1 голос
/ 04 марта 2020

Пример - результаты тестов по одному предмету учащихся сохраняются в поисковом индексе Elasti c. Теперь я хочу найти 5 лучших студентов, которые набрали наибольшее количество баллов по этому предмету.

Ответы [ 2 ]

1 голос
/ 04 марта 2020

Позвольте мне показать это на примере, но сначала поймите концепцию.

Сначала запрос на основе данного предмета, в моем примере известный math субъект :), а затем он извлечет все студенты, имеющие math предмет, после этого sort в desc порядке, основанном на их score, а затем size параметре, ограничивают результат до лучших k студентов.

Imp ссылки, связанные с ответом:

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
            ]
         }
1 голос
/ 04 марта 2020

Просто сортируйте результаты поиска по полю, которое вы хотите, т.е. score
Это может c помочь вам https://www.elastic.co/guide/en/elasticsearch/reference/6.8/search-request-sort.html

...