2017-02-23 93 views
0

Я выполняю поиск в методе логики с помощью JsonDocumentManager, предоставляя определение StructuredQuery. В результате я получаю DocumentPage, deafults до 50 записей (длина страницы по умолчанию в JsonDocumentManager). Но я хочу сдать все документы за один раз?Устанавливает разбиение на страницы при поиске документов в marklogic по заданным критериям

Здесь я могу найти два варианта: либо увеличить длину страницы до предела, который не может быть превышен для критериев, которые я поставляю, либо путем предоставления смещения страницы в jsonDocumentManager.search (queryDefinition, pageOffset) в петля до тех пор, пока documentPage.isLastPage вернется к истине

Может кто-нибудь, пожалуйста, дайте мне знать дальнейшие варианты, если они есть? Есть ли какой-либо параметр для разбивки на страницы, который я могу переключить на false, чтобы позволить marklogic делать разбитый на страницы поиск?

+1

Обычно неразумно извлекать все документы в одном запросе, если вы не уверены, что существует только ограниченное число, например, менее 500. Для чего-либо, кроме этого, обычно разумно запускать запросы параллельно или перебирать по страниц в последовательности. Можете ли вы подробно остановиться на этой цели? – grtjn

+0

Спасибо grtjn за ответ. Мой вариант использования. Я хочу создать файл csv, извлекая все документы из базы данных, которая передает указанные критерии поиска. Ожидаемый объем составляет около 70 тыс. В день. Поэтому либо я могу увеличить размер страницы, но, как было предложено вами, это не очень хороший подход, или я могу предоставить смещения страниц в поиске в цикле. Не могли бы вы сообщить мне рекомендуемый подход, которому я должен следовать? – Kiras

+0

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

ответ

2

Как указано в @grtjn, всегда лучше разбивать страницы и даже быстрее, если вы можете запускать запросы параллельно. По этой причине Java API не имеет флага для получения всех результатов. Также не накладываются слои: REST API и API поиска: поиск.

Слой, который строится, cts: search, использует ленивую оценку на стороне сервера, чтобы эффективно разбивать страницы под капотом, пока он, кажется, получает все результаты. С учетом сказанного, если у вас есть другие варианты, кроме тех, о которых вы уже знаете, подумайте о создании Resource extension и позвоните напрямую в API cts: search.

Для того, что стоит, в MarkLogic 9 мы предоставим Data Movement SDK, который сделает всю разбивку на страницы и распараллеливание для вас под капотом на стороне клиента. Он специально разработан для долгосрочных приложений для перемещения данных, которые необходимо экспортировать или манипулировать большими наборами данных. Если это интересно, подумайте о присоединении к программе раннего доступа, и вы можете попробовать.

+0

Спасибо Сэм ... Я попробую с расширением ресурса .. Спасибо за ответ. – Kiras

+0

Привет Сэм, я попытался использовать расширение ресурсов. У меня есть один вопрос, хотя ... Раньше, используя jsonDocManager.search (....), я получал DocumentPage, а затем повторял его, возвращал мне DocumentRecord, который помогает мне получать метаданные documentUri и документа, используя DocumentMetadataHandle. Можем ли мы получить метаданные документа и документ uri в этом случае? Я предполагаю, что использование javascript и возвращение объекта, который состоит из документа uri, метаданных документа и содержимого документа будет таким, каким я могу следовать. Тогда я могу сделать расширение ресурса, чтобы получить этот объект, а затем работать соответствующим образом? – Kiras

+0

Правильно, вы можете вернуть пользовательскую полезную информацию XML или JSON, которая содержит всю необходимую информацию. Однако я бы рекомендовал либо разбивать на страницы в цикле, либо просто увеличивать размер страницы, а не переходить ко всей этой работе, создавая собственное расширение. –