couchdb нумерация страниц со сложными запросами - PullRequest
1 голос
/ 04 апреля 2011

Например, у нас есть текстовый фильтр, например

docs = db.view ("_ design / filter / _view / substr", startkey = substring, endkey = substring + u "\ ufff0", include_docs = True, предел = 20, пропуск = 0)

Как правильно сделать нумерацию страниц без медленного пропуска?

Ответы [ 2 ]

1 голос
/ 06 апреля 2011

CouchDB расслаблен. Вы можете использовать skip сейчас. Это будет работать очень хорошо, и вы можете сосредоточиться на других важных вещах. Основная проблема заключается в том, что он не является в конечном итоге масштабируемым. Для небольших наборов данных (до 1000 строк или около того) я бы не волновался.

Однако в долгосрочной перспективе это не будет работать хорошо. Вместо установки skip в 0, 20, 40, 60 и т. Д. Вместо него можно использовать startkey.

  1. Запрос в первый раз, startkey=substring, limit=20.
  2. Посмотрите на последний ряд в результате. key сообщает вам, какой ключ он использовал в представлении.
  3. Таким образом, ваш следующий запрос будет иметь startkey= значение key из шага 2, плюс limit=20 и skip=1.

Видите, что случилось? Второй запрос начинается там, где заканчивается первый запрос. Чтобы не показывать один и тот же ряд дважды, просто пропустите его. (Вы также можете получить его, но проигнорируйте его на стороне клиента - ваш выбор.)

Это работает большую часть времени. Я также предлагаю вам взглянуть на startkey_docid, описанное в CouchDB view API .

1 голос
/ 04 апреля 2011

Прежде всего, я надеюсь, вы понимаете, что это не полнотекстовый поиск.Вы также не можете реализовать разбиение на страницы в CouchDB без использования параметра пропуска, потому что вы не можете сказать, где, скажем, находится 20-й элемент.Таким образом, единственный способ имитировать разбиение на страницы - сделать ссылку / кнопку "next N results".

...