переписать правила, которые преобразуют токены в целочисленные параметры - PullRequest
3 голосов
/ 31 мая 2011

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

Теперь эти числа имеют значение, гдеПервые 2 цифры представляют определенный тип документа.

Поэтому, чтобы получить документы типа 22, отсортированные по их оценкам, я просто запрашиваю представление с ключом начала, равным 220000, и ключом конца, равным 229999

* 1006.* Это все замечательно и работает, мои проблемы возникают, когда я пытаюсь использовать перезапись URL.

Я в основном пытаюсь перенаправить:

/_rewrite/rankings/{doctype}

на

/_list/rankings?startkey=xx0000&endkeyxx9999

где xx - это {doctype}

Моя проблема связана с указанием правила перезаписи:

[
    { "from":"rankings/:doctype",
      "to":"_list/rankings",
      "query": ??? //what will this be?
]
  • Как создать начальный и конечный ключи, добавив 0000и 9999 соответственно?

  • как мне указать числовое значение?поскольку использование заполнителя ": doctype" приведет к строковому типу, а не к числовому типу, что приведет к неудачному запросу, даже если бы я изменил свой симпатичный URL-адрес для ввода ключей начала и конца.

  • Я обошел проблему, отфильтровав результаты в моем представлении списка (игнорируя документы, которые мне не интересны из getRow ()), мое беспокойство здесь, стоит ли мне беспокоиться об эффективности функции спискасейчас?

не стесняйтесь комментировать также мою стратегию сортировки ... было бы интересно узнать, как другие решали свои проблемы сортировки и нарезки с помощью couchdb

1 Ответ

1 голос
/ 11 января 2012

Решение

Во-первых, вы должны выдавать тип и счет отдельно в массиве вместо их объединения:

emit([doc.type, doc.score], doc);

Тогда вы можете переписать, как это

[
  {
    "from"  : "rankings/:doctype",
    "to"    : "_list/rankings/rankings",
    "query" : {
      "startkey" : [":doctype", 0],
      "endkey"   : [":doctype", 9999]
    },
    "formats": {
      "doctype" : "int"
    }
  }
]

Я протестировал его на CouchDB 1.1.1, и он работает.

Ссылка

В этом выпуске на JIRA похоронена соответствующая документация: COUCHDB-1074

Как видите, проблема была решена в апреле 2011 года, поэтому она должна работать в CouchDB 1.0.3 и выше.

...