ElasticSearch Facets / Сортировка / сортировка агрегатов

Кто-нибудь знает, как упорядочить сегменты агрегации/фасета из диапазона в предсказуемый порядок, то есть в том порядке, в котором они были добавлены в фасет?

В настоящее время ветка 1.4 (и, возможно, более старые ветки) упорядочивает ведра по «doc_count», что непредсказуемо. Я хочу иметь возможность выводить ведра в заранее определенном порядке.


person user3169851    schedule 25.11.2014    source источник
comment
Что вы подразумеваете под заранее определенным порядком? Пожалуйста, уточните ваше требование.   -  person bittusarkar    schedule 25.11.2014
comment
Порядок, который я могу установить, например, возврат сегментов в том порядке, в котором я их запросил, вместо того, чтобы упорядочивать их по doc_count.   -  person user3169851    schedule 25.11.2014
comment
еще позвольте мне добавить произвольное поле в ведра, которые будут возвращены в ведро, например, метку или какой-либо идентификатор, чтобы я мог разобраться сам...   -  person user3169851    schedule 25.11.2014
comment
У вас есть какие-то особые требования?   -  person bittusarkar    schedule 25.11.2014
comment
Да, чтобы иметь возможность определить порядок, в котором они возвращаются. Например, я хотел бы перечислить такие вещи... Сегодня (1) Вчера (5) 3 дня назад (3) 5 дней назад (1) и и так далее, но в настоящее время ES возвращает их по порядку или вчера, 3 дня назад, 5 дней назад, сегодня .... что очень непредсказуемо и совсем не так, как продвигать хороший UX, где списки должны быть в какой-то упорядоченной форме. Вот как в настоящее время работает SOLR, поэтому я знаю, что это возможно в самой Lucene.   -  person user3169851    schedule 25.11.2014
comment
Не уверен, что это можно сделать, но я думаю, вы также можете сортировать ведра в самом клиенте. Кстати, вы смотрели поле order в агрегации терминов?   -  person bittusarkar    schedule 25.11.2014
comment
Это агрегаты диапазонов, а не термины. Конечно, клиент может сортировать сегменты, но когда вы используете математическую библиотеку дат (сейчас/1d и т. д.) для определения диапазонов дат, становится очень и очень сложно предсказать ключи/значения для сортировки. Во-вторых, ES не должен лишать возможности сортировать ответ или нет.   -  person user3169851    schedule 25.11.2014
comment
Оказывается, к диапазону можно добавить ключ — еще одна часть недокументированной информации!   -  person user3169851    schedule 25.11.2014
comment
Возможное решение, которое я не пробовал, которое приходит мне в голову, — это использование elastic.co/guide/en/elasticsearch/reference/1.4/, чтобы изменить оценку по вашему желанию, например, документы 1 день назад = 1 оценка, 2 дня назад = 0,5 , 5 дней назад 0,1 ... и так далее. И, наконец, используйте sort: _score в контексте запроса.   -  person jordivador    schedule 14.12.2016


Ответы (1)


Простым способом может быть заказ их на вашем конце после ответа от Elasticsearch. Другим способом может быть заказ по термину (ключу агрегации).

Обновлять:

Если вы используете агрегацию диапазона дат с запросом, как показано ниже, результат будет автоматически в хронологическом порядке: «3 дня назад», «вчера», «сегодня» независимо от doc_count.

 {
   "aggs" : {
       "timerange" : {
           "date_range" : {
               "field" : "day",
               "keyed" : true,
               "ranges" : [
                {
                    "key": "today",
                    "from": "now/d"
                }
                ,
                {
                    "key": "yesterday",
                    "from": "now-1d/d",
                    "to": "now/d"
                },
                {
                    "key": "3 days ago",
                    "from": "now-3d/d",
                    "to": "now-2d/d"
                }
              ]
          }
      }
  }
}

Если вас интересуют ежедневные данные, то Гистограмма дат будет удобнее.

person Prabin Meitei    schedule 25.11.2014
comment
Еще раз, это запросы RANGE. - person user3169851; 25.11.2014
comment
Я внес некоторые изменения в исходный ответ. Дайте мне знать, правильно ли я понимаю вашу проблему - person Prabin Meitei; 26.11.2014
comment
Это очень хакерский ответ, чтобы всегда ожидать, что ключи корзины будут сортируемыми из-за того, как они помечены, но все равно спасибо. Я решил сделать сортировку на стороне клиента - person user3169851; 26.11.2014