Как заставить cloudantDb.search возвращать все записи вместо лимита 25 и закладки - PullRequest
0 голосов
/ 02 октября 2018

Я пытаюсь использовать поисковый индекс, чтобы сделать поиск быстрее.Вот мой код:

return new Promise((resolve, reject) => {
  let conf = {'include_docs': true}
  conf.q = "user: 'new'";

  db.search('app', 'userIndex', conf, (err, body) => {
    if (!err) {
      console.log('success');
      resolve({status: 'Success', response: {userDocs: body.total_rows}});
    } else {
      console.log('error');
      resolve({ status: 'Failure', response: { Error: err } });
    }
  });
});

Работает нормально, но возвращает только 25 документов (их сотни) и закладку.Есть ли способ заставить поиск возвращать все документы вместо вызова нового обещания для каждой закладки.Если я пройду все закладки, он будет работать даже медленнее, чем метод .find ().

1 Ответ

0 голосов
/ 02 октября 2018

Функция db.search делает запрос по индексу Cloudant Search .Cloudant Search - это система индексации на основе Apache Lucene для поиска в свободном тексте, и результаты возвращаются в количестве до 200 документов на поиск.Если набор результатов содержит более 200 документов, набор результатов поиска будет содержать «закладку», которую можно передать Cloudant при последующем запросе для получения следующего блока результатов поиска.

Функция db.find выполняетзапрос по индексу Cloudant .Cloudant Query - это язык запросов общего назначения, похожий на синтаксис запросов MongoDB.Наборы результатов поиска ограничены 25 (по умолчанию), но их можно переопределить максимум до 200 документов.Опять же, система закладок позволяет пролистывать результирующий набор.

например,

const q = { 
  selector: {
    name: { "$eq": "Brian"},
    age : { "$gt": 25 }
  },
  fields: [ "name", "age", "tags", "url" ]
  limit:200
};
mydb.find(q).then((data) => {
  console.log(data);
});

Большие наборы данных могут быть возвращены за один вызов API путем определения MapReduce представленийэто могут быть запросы с большими значениями «limit» с использованием функции db.view.

...