У меня есть Marklogic Count xquery, который работает нормально, возвращая общее количество ключевых слов. Я пытаюсь выполнить тот же запрос, что и работа CORB - PullRequest
0 голосов
/ 23 января 2019

У меня есть Marklogic Count xquery, который работает нормально, возвращая общее количество ключевых слов. Я пытаюсь выполнить тот же запрос, что и задание CORB, но в результате я получаю счет каждого узла. У кого-нибудь есть идеи на этот счет, пожалуйста, поделитесь со мной идеей.

Ниже запрос, что я использую.

xdmp:estimate(cts:search(fn:doc(), cts:word-query("Cirrus")))

1 Ответ

0 голосов
/ 24 января 2019

xdmp:estimate возвращает количество документов (фрагментов), соответствующих запросу, а не количество совпадений определенного термина в этих документах. Это происходит очень быстро, потому что MarkLogic может рассчитать число, используя только индексы.

Однако для подсчета совпадений в документе необходимо загрузить весь документ в память, прежде чем можно будет сосчитать совпадающие термины, что намного медленнее и требует больше памяти. Если вы попытаетесь выполнить этот тип подсчета слишком большого количества документов в одном запросе, вы можете взорвать кэш расширенного дерева (который отвечает за хранение полного XML документов, прочитанных во время запросов), поэтому важно тщательно настроить CORB. работа по предотвращению этого.

Вот пример того, как можно посчитать все отдельные совпадения для запроса в наборе результатов:

sum(
  cts:search(fn:doc(), cts:word-query("Cirrus"))
    /cts:walk(., cts:word-query('Cirrus'), 1)
)
...