在xml值上创建Marklogic索引

时间:2013-07-08 14:14:12

标签: marklogic

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-type 状态。应该使用哪种索引机制Path-Range-index或其他?不知怎的,我觉得它不对。请建议。

1 个答案:

答案 0 :(得分:2)

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

然而,仍有一些改进空间。在您的XML中,value元素在检查name元素之前并不意味着什么。通过类比,考虑当您有一列name和一列value时,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,对单个元素的查询不再需要任何连接。使用statusmime-type的查询将加入这两个查找的结果,而旧的XML必须从三个查找加入。作为附带的好处,XML也更容易让人阅读和理解。