簡體   English   中英

在MarkLogic數據庫中搜索具有最大大小的XML文檔

[英]Search XML document with the largest size in a MarkLogic database

我想使用XQuery從MarkLogic查詢控制台中搜索MarkLogic數據庫中最大的XML文件。 我可以使用以下XQuery檢索數據庫中文檔的大小(字節):

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

其中$doc是我得到大小(以字節為單位)的文檔。

確實,文檔大小沒有索引可以快速找到最大的索引。 但是有一些選項可以找到大型文檔。

一種是運行批處理作業,使用上面的函數掃描大型文檔以計算大小。 使用帶有XQuery字符串長度(xdmp:quote(doc($ uri)))或JavaScript xdmp.quote(cts.doc(“/ my / uri / here”))。length的序列化長度也有點簡單。

通過xdmp.spawnFunction()在任務服務器上執行Corb或NiFi或產生函數可以在一段時間內執行這樣的大工作,在那里您可以檢查每個文檔大小並存儲記錄或記錄指標是否超過某個大小限制。 然后,您將搜索或grep查看最大的大小。

有時,如果您知道更大文檔中的結構和一些常用術語,您可以使用cts.wordQuery(“theCommonTerm”)和選項“多次”搜索包含常用“單詞”或“術語”的文檔。最小發生=號碼”。 您需要調整最小值,以縮小到最大的文檔,然后運行您的大小查詢。

我發現以下查詢很有用:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM