搜索MarkLogic数据库中最大尺寸的XML文档

时间:2019-06-18 14:20:35

标签: xml max size xquery marklogic

我想使用XQuery从MarkLogic查询控制台中搜索MarkLogic数据库中最大的XML文件。我可以使用以下XQuery检索数据库中文档的大小(字节):

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

其中$doc是要获取其字节大小的文档。

2 个答案:

答案 0 :(得分:0)

的确,没有文档大小索引可以快速找到最大的索引。但是,有一些查找大型文档的选项。

一种方法是运行一个批处理作业,该批处理作业使用上述功能来扫描大型文档以计算尺寸。同样,将序列化长度与XQuery string-length(xdmp:quote(doc($ uri)))或JavaScript xdmp.quote(cts.doc(“ / my / uri / here”))。length一起使用也要简单一些。

Corb或NiFi或通过xdmp.spawnFunction()在任务服务器上生成工具可以在一段时间内执行类似的大任务,您可以在其中检查每个文档的大小并存储记录或记录指示符(如果有的话)超过一些尺寸限制。然后,您将搜索或grep查找最大的大小。

有时,如果您知道较大文档中的结构和一些通用术语,则可以使用cts.wordQuery(“ theCommonTerm”)和包含通用“单词”或“术语”的文档多次搜索。选项“ min-occurs = number”。您需要调整最小出现次数以将内容缩小到最大的文档,然后仅对这些文档运行大小查询。

答案 1 :(得分:0)

我发现以下查询很有用:

(
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]