Возможно, проблема в том, что у вас есть индекс диапазона на <TEI>
, который содержит весь документ.Индексы диапазона отображаются в памяти, поэтому вы по существу принудительно поместили все текстовое содержимое вашей базы данных в память.Трудно точно сказать, что происходит, но, вероятно, трудно проверить значения (индексы диапазона рассчитаны на более мелкие атомарные значения) и, возможно, перейти на диск.
MarkLogic имеет отличную документацию по индексированию, поэтому я бы рекомендовал начать там, чтобы лучше понять, как их использовать: https://docs.marklogic.com/guide/concepts/indexing#id_51573
Обратите внимание, что даже при использовании опции item-frequency
,результаты (или количество) не гарантируются как "один к одному" с "общим числом раз, когда ключевое слово появляется".Он сообщит количество совпадений «элементов» - в вашем примере он сообщит о количестве совпадений <TEI>
элементов.
Проблема получения точного количества терминов, соответствующих запросу во всей базе данных, заключается в том, чтона самом деле довольно сложно.Чтобы получить точные совпадающие значения в документе, вам нужно будет использовать cts:highlight
или cts:walk
, что требует загрузки всего документа в память.Как правило, это хорошо работает для подмножества документов, но в конечном итоге, чтобы получить точное значение для всей базы данных, вам необходимо загрузить всю базу данных в память и обработать каждый документ.
Практически любой подход к получению терминаСчетчик совпадений требует некоторого приближения и сильно зависит от вашей разметки.Например, если вы индексируете элементы <p>
(или даже лучше <s>
), можно будет создать запрос, использующий индексы для подсчета количества совпадающих абзацев (или предложений), но при этом все равно будет загружен невероятно большойколичество данных в память и хранить его там.Это технически возможно, если вы хотите выделить достаточно памяти (и / или серверов), но вряд ли это того стоит.