Как я могу контролировать порядок результатов? Запросы диапазона Lucene в Cloudant

У меня есть простой индекс, который выводит «оценку» от 1000 до 12000 с шагом 1000. Я хочу получить диапазон результатов, например, от низкой до высокой;

q=score:[1000 TO 3000]

Однако это всегда возвращает список совпадений, начиная с 3000, и в зависимости от ограничения (и количества совпадений) он может никогда не возвращать 1000 совпадений, даже если они существуют. Я пытался использовать sort:+- и группировку, но, похоже, ничто не повлияло на возвращаемый результат.

Так; как можно контролировать порядок возвращаемых результатов?

В идеале я хочу выбрать совпадения из диапазона, но я предполагаю, что это невозможно, учитывая, что запрос только начинает заполнять результаты сверху?

Для справки индекс выглядит так;

function(doc) {
    var score = doc.score;
    index("score", score, {
        "store": "yes"
    });
...

person SonarJetLens    schedule 26.02.2015    source источник
comment
Я думаю не могу использовать boost, кстати; единственное, что делает один индекс более ценным, чем другой, — это оценка, и ничего больше.   -  person SonarJetLens    schedule 26.02.2015


Ответы (2)


Я не могу комментировать это, поэтому публикую ответ здесь:

Судя по облачному документу по запросам lucene, невозможно отсортировать результаты запроса. Приведенные здесь параметры сортировки предназначены для группировки. И даже для сгруппированных результатов я никогда не видел работы сортировки. В любом случае предполагается сортировать последовательность самих групп. Не данные внутри.

person pal2ie    schedule 07.03.2015

@ pal2ie, вы правы, и Cloudant вернулся ко мне, чтобы подтвердить это. В некотором смысле это имеет смысл, но я надеялся, что смогу хотя бы контролировать направление (ло-> привет, привет-> ло). Решение, которое я реализовал, чтобы получить лучшее распределение по диапазону, состоит в том, чтобы не использовать запросы диапазона, а вместо этого;

  1. создать распределение количества желаемых результатов для каждой оценки в диапазоне (например, простое, дискретное, гауссовское)
  2. выполнять отдельные запросы для каждой оценки в диапазоне с ограничением, равным количеству желаемых результатов для этой оценки
  3. выполнить шаг 2 от мин до макс, заполнив результат

Это не самый эффективный способ, так как он означает несколько обращений к серверу, но, по крайней мере, дает мне полный контроль над распределением в диапазоне.

person SonarJetLens    schedule 09.03.2015