xdmp:estimate
возвращает количество документов (фрагментов), соответствующих запросу, а не количество совпадений определенного термина в этих документах. Это происходит очень быстро, потому что MarkLogic может рассчитать число, используя только индексы.
Однако для подсчета совпадений в документе необходимо загрузить весь документ в память, прежде чем можно будет сосчитать совпадающие термины, что намного медленнее и требует больше памяти. Если вы попытаетесь выполнить этот тип подсчета слишком большого количества документов в одном запросе, вы можете взорвать кэш расширенного дерева (который отвечает за хранение полного XML документов, прочитанных во время запросов), поэтому важно тщательно настроить CORB. работа по предотвращению этого.
Вот пример того, как можно посчитать все отдельные совпадения для запроса в наборе результатов:
sum(
cts:search(fn:doc(), cts:word-query("Cirrus"))
/cts:walk(., cts:word-query('Cirrus'), 1)
)