簡體   English   中英

在 cts:search 中使用 fn:doc() 與查詢中的特定節點

[英]In cts:search using fn:doc() vs specific node in query

在以下 2 個查詢中,性能差異有多大。

選項1-

cts:search(fn:doc(),
  cts:and-query((
    cts:collection-query('xyz'),
    cts:element-value-query(xs:QName('test'),'12344')
  ))
)

選項 2-特定節點

cts:search(/root-node,
  cts:and-query((
    cts:collection-query('xyz'),
    cts:element-value-query(xs:QName('test'),'12344')
  ))
)

PS:DB中還有很多其他的集合。

請指導我。 哪一個更好用,它在 Marklogic 中是如何工作的?

如果不知道數據庫的大小以及有多少文檔具有/root-node以及有多少文檔與其他查詢條件匹配,就很難知道有什么區別。

如果帶有集合和元素值的查詢條件足夠具體以至於/root-node條件不是必需的,那么使用第一個可能更容易且性能更高。

您可以通過使用xdmp:plan()包裝搜索來查看生成的查詢計划的差異,以查看查詢條件的樣子。 為第一個參數應用該路徑表達式將包括一些額外的術語查詢條件,以定位具有root-node作為文檔根元素的文檔,如下所示:

<qry:or-two-queries>
  <qry:term-query weight="0">
    <qry:key>2975665039653361017</qry:key>
    <qry:annotation>doc-root(element(root-node),doc-kind(document))</qry:annotation>
  </qry:term-query>
  <qry:term-query weight="0">
    <qry:key>6481445092305598577</qry:key>
    <qry:annotation>link-child(descendant(doc-root(element(root-node),doc-kind(document))))</qry:annotation>
  </qry:term-query>
</qry:or-two-queries>

我懷疑您可能不會看到這兩個查詢之間的巨大差異,但最好始終進行測試和測量。

暫無
暫無

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

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