Сортировка в Elastic Search - возьмите лучшие N записей - PullRequest
0 голосов
/ 14 февраля 2019

Можно ли отсортировать все документы по полю A, взять первые N записей, а затем снова отсортировать все записи по полю B в ElasticSearch?

То, что я пробовал до сих пор, приведено ниже, но оно не отсортировано по полю B

{  
    "query":{  
     "bool":{  
     "must":[  
        {  
           "match_all":{  

           }
        }
     ],
     "must_not":[  

     ],
     "should":[  

     ]
  }
},
"from":0,
"size":20,
"sort":[  
{
  "FieldA": {
    "missing": "_last",
    "order": "desc"
  }
}, 
{
  "FieldB": {
    "missing": "_last",
    "order": "desc"
  }
}
],
 "aggs":{  

 }
}

Эквивалентный SQL будет

SELECT * FROM (SELECT TOP 250 FROM TABLE ORDER BY FieldA) ORDER BY FieldB 

Запуск на Elasticsearch 5.3

1 Ответ

0 голосов
/ 25 февраля 2019

Я нашел это решение из этого вопроса .

По сути, мы хотим отсортировать таблицу по одному столбцу, получить первые N результатов и затем снова отсортировать по другому столбцу.Запрос также будет выглядеть примерно так:

Сначала мы отсортируем по полю А, возьмем верхние 50, а затем передадим его для сортировки по полю Б.

{
   "sort":[
      {
         "FieldA": {
           "missing": "_last",
           "order": "desc"
         }
      }
   ],
   "query":{
      "match_all":{}
   },
   "size":50,
   "aggs":{
      "top_fieldB_hits":{
         "top_hits":{
            "sort":[
               {
                  "FieldB": {
                    "missing": "_last",
                    "order": "desc"
                   }
               }
            ],
            "size":50
         }
      }
   }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...