2012-05-18 41 views
2

我在Marklogic數據庫中有20個左右的文檔。我想要在我的搜索應用程序中分頁的文檔總數。爲了得到總計我使用如何獲取Marklogic數據庫中的文檔總數?

xdmp:estimate(cts:search(doc(), $query)) 

其中$查詢各種查詢組合cts:and-query的組合。但我沒有得到正確的總數。當$ query爲空時,它顯示比數據庫中文檔總數高得多的計數。當我使用

xdmp:estimate(doc()) 

它顯示我正確的總數,但它會是靜態總數,不會根據查詢而改變。我希望總數根據返回的結果迴應一個特定的查詢,這就是爲什麼我通過$ query作爲參數,但它沒有顯示正確的總數。 fn:count()顯示正確的總數,但是當文檔數量大約爲20 lacs時,則fn:count()不起作用,因爲fn:count()xdmp:estimate()慢。

請幫助我獲得響應用戶輸入的搜索詞返回的文檔的正確總數。

回答

9

要明白是怎麼回事,通過讀取http://resources.marklogic.com/library/media/inside-marklogic

架構白皮書現在試試這個測試案例開始:

xdmp:estimate(doc()), 
xdmp:estimate(cts:search(doc(),())) 

第一個表達式將計算在文件數數據庫。第二個表達式將計算數據庫中的文檔片段的數量。因此,如果結果不同,您可能會配置片段根目錄或片段父級。一些特殊的文件也會產生額外的碎片:我認爲拼寫字典和同義詞庫文件是這樣做的。

如果要將估算限制爲XML文檔根目錄,請在可搜索表達式中指定文檔根QName(s),如果您不關心根元素名稱,請使用/*

xdmp:estimate(cts:search(/*,())) 

您也可以使用cts:query參數來指定僅出現在要計數的文檔中的QName。

1

我不明白你的問題。你想要數據庫中的文件總數還是與搜索相匹配的文件總數?

xdmp:estimate是正確的路要走,但它只是一個估計。如果估計中使用的查詢可以完全從索引中解析出來,那麼估計將是100%正確的。但是,如果查詢無法從索引完全解析(需要過濾),那麼估計會有一定的偏差。這是因爲xdmp:estimate只使用索引來計數。將fn:count(cts:search(doc(), $query))xdmp:estimate(cts:search(doc(), $query))進行比較。如果給定查詢的結果顯着不同,那麼您需要打開其他索引來支持該查詢或者與差異保持一致。

相關問題