У меня есть XML-документ, подобный этому.Получить отличный результат в сервере marklogic
<Authors>
<Author>
<name>R.N Tagore</name>
<book>Gitanjli</book>
</Author>
<Author>
<name>Premchand</name>
<book>Panch Parameshvar</book>
</Author>
<Author>
<name>H.R Bacchan</name>
<book>Madhushala</book>
</Author>
<Author>
<name>Premchand</name>
<book>Gaban</book>
</Author>
<Author>
<name>Premchand</name>
<book>Nirmala</book>
</Author>
<Author>
<name>Premchand</name>
<book>Nirmala</book>
</Author>
</Authors>
Из вышеприведенного XML мне нужен отдельный список имени автора.
Для этого я могу написать запрос, как,
fn:distinct-values(cts:search(fn:doc()//pa:Author/pa:name,cts:and-query(())))
Что выше код будет делать это, он получит результат имени авторов, а затем Fn: отчетливое-значение() функции будет фильтровать отчетливое Имя автора из этого результирующий набор. Для текущего сценария будет работать нормально, так как данные в XML только 6, но когда данные очень высоки скажем 50 Лак
cts:search(fn:doc()//pa:Author/pa:name,cts:and-query(()))
выше часть запроса даст XDMP-EXPNTREECACHEFULL исключения, потому что мы пытаемся cache 50 lac в памяти.
Для этого необходимо указать только свое имя автора, используя cts: search или search: search API. Я не хочу сначала получать набор результатов, а затем извлекать отдельную запись из этого набора результатов, используя fn: distinct-values ().