Marklogic:元素值查询与路径范围查询

问题描述 投票:0回答:1

我正在做一些锻炼,以找出性能方面的明智选择,无论是元素值查询还是路径范围查询。

我发现使用路径范围查询进行搜索要比元素值查询慢一点。

没有人对路径范围查询的搜索速度有任何想法,即使它加载了额外的路径范围索引。

我使用了下面的代码。

    xdmp:document-delete("/aname4.xml")
    xdmp:document-insert("/aname1.xml",
      <name><fname>John</fname><mname>Rob</mname><lname>Goldings</lname></name>),
    xdmp:document-insert("/aname2.xml",
      <name><fname>Jim</fname><mname>Ken</mname><lname>Kurla</lname></name>),
    xdmp:document-insert("/aname3.xml",
      <name><fname>Ooi</fname><mname>Ben</mname><lname>Fu</lname></name>),
    xdmp:document-insert("/aname4.xml",
      <name><fname>James</fname><mname>Rick</mname><lname>Tod</lname></name>)

    create path range index "/name/fname"

    checked response time with following search code

    cts:search(doc(),cts:path-range-query("/name/fname","=","Jim"),"filtered")

    cts:search(doc(),
      cts:element-value-query(xs:QName("fname"),"jim"),
    "filtered")

使用路径范围查询时是否有应考虑的特定事项

任何建议都会受到赞赏,因为它有助于我们设计有效的搜索代码。

我正在做一些锻炼,以找出性能方面的明智选择,无论是元素值查询还是路径范围查询。我发现使用路径范围查询进行搜索要比元素慢一些...

marklogic marklogic-8 marklogic-9
1个回答
0
投票

在经过过滤的查询中,需要遍历每个候选匹配文档以检查是否匹配。要验证元素范围匹配,我们只需要查看元素的名称,然后查看其内容(如果名称匹配)。要验证路径范围匹配,我们需要确保当前元素的名称与路径的末尾匹配,然后(在这种情况下)确保其父元素名称匹配,然后该父元素位于根。这不是更多的工作,而是更多的工作。同样,建立索引需要做更多的工作才能知道要索引的元素内容。

© www.soinside.com 2019 - 2024. All rights reserved.