繁体   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