我想使用XQuery从MarkLogic查询控制台中搜索MarkLogic数据库中最大的XML文件。我可以使用以下XQuery检索数据库中文档的大小(字节):
xdmp:binary-size(xdmp:unquote(xdmp:quote($doc),(),"format-binary")/binary())
其中$doc
是要获取其字节大小的文档。
答案 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]