Поиск XML-документа с наибольшим размером в базе данных MarkLogic - PullRequest
0 голосов
/ 18 июня 2019

Я хочу найти самый большой XML-файл в базе данных MarkLogic из консоли запросов MarkLogic, используя XQuery. Я могу получить размер (в байтах) документа в базе данных, используя следующий XQuery:

xdmp:binary-size(xdmp:unquote(xdmp:quote($doc),(),"format-binary")/binary())

где $doc - документ, для которого я получаю размер в байтах.

Ответы [ 2 ]

0 голосов
/ 19 июня 2019

Мне показался полезным следующий запрос:

(
for $doc in cts:uri-match('*.xml')
order by string-length(fn:doc($doc)) descending
return $doc
)[position() = 1]

Приведенный выше запрос использует функцию string-length для определения количества символов в документе.Этот запрос полезен, когда в искомом документе есть специальные символы.

Если вы хотите количество байтов, вы можете использовать xdmp:binary-size следующим образом:

(
for $doc in cts:uri-match('*.xml')
order by xdmp:binary-size(xdmp:unquote(xdmp:quote(fn:doc($doc)),(),"format-binary")/binary()) descending
return $doc
)[position() = 1]
0 голосов
/ 19 июня 2019

Это правда, что нет индекса по размеру документа для быстрого поиска самых больших. Но есть несколько вариантов поиска больших документов.

Один из них - запустить пакетное задание, которое сканирует большие документы, используя вышеуказанную функцию для вычисления размера. Также немного проще использовать сериализованную длину с длиной строки XQuery (xdmp: quote (doc ($ uri))) или xdmp.quote JavaScript (cts.doc ("/ my / uri / here")). Length.

Функции Corb или NiFi или порождения на сервере задач через xdmp.spawnFunction () могут выполнять такую ​​большую работу в течение определенного периода времени, когда вы проверяете размер каждого документа и сохраняете запись или регистрируете индикатор, если он был за некоторый предел размера. Затем вы будете искать или grep для наибольшего размера.

Иногда, если вы знаете структуру и некоторые общие термины, которые будут в большом документе, вы можете искать документы, которые содержат общее слово или термин много раз, используя cts.wordQuery ("theCommonTerm") и опция "мин-происходит = число". Вам нужно настроить число минимальных встреч, чтобы сузить размер до самых больших документов, а затем выполнить запрос размера только для них.

...