1

XML 结构如下所示:

   <division>
     <sub-divison>
       <name>
         mime-type
       </name>
       <value>
         .jpeg
       </value>
     </sub-divison>
     <sub-divison>
        <name>
          status
        </name>
        <value>
          Work In Progress
        </value>
     </sub-divison>
    </division>

我需要索引mime-typestatus。应该使用什么样的索引机制,Path-Range-index或者其他?不知怎的,我觉得它不正确。请建议。

4

1 回答 1

2

你不必做任何事情。MarkLogic 自动索引元素值、元素属性值和单词。name因此,无需任何配置更改,您就可以编写 XPath 表达式并为和构造 cts:query 术语value。那些将使用内置的元素值索引。试试看,看看它是否对您的应用程序足够快。如果不是,则问题可能出在查询而不是索引上。您可以使用http://docs.marklogic.com/xdmp:planhttp://docs.marklogic.com/xdmp:query-trace查看使用了哪些索引。

不过还有一些改进的余地。在您的 XML 中,在元素也被检查value之前,该元素并不意味着什么。name以此类推,考虑一下当你有一个 columnname和一个 columnvalue并且想要 select时 SQL 会做什么WHERE name=? AND value=?。SQL 求值器必须查找name,查找value,然后加入结果。MarkLogic 会做类似的事情,加入两个查找项。在大规模情况下,连接是昂贵的。

因此,如果您想要获得最佳性能,请将您的 XML 重构为如下所示:

<division>
 <sub-divison>
   <mime-type>.jpeg</mime-type>
   <status>.jpeg</status>
 </sub-divison>
</division>

使用这样的 XML,对单个元素的查询不再需要任何连接。status一个同时使用and的查询mime-type将连接这两个查找的结果,而旧的 XML 必须连接三个查找的结果。作为一个附带的好处,XML 也更易于人类阅读和理解。

于 2013-07-08T16:30:09.377 回答