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
或其他?不知怎的,我觉得它不对。请建议。
答案 0 :(得分:2)
您无需做任何事情。 MarkLogic自动索引元素值,元素属性值和单词。因此,如果不进行任何配置更改,您可以编写XPath表达式并构造cts:name
和value
的查询术语。那些将使用内置元素值索引。试试看,看看它是否足够快你的应用程序。如果不是,则问题可能出在查询中而不是索引中。您可以使用http://docs.marklogic.com/xdmp:plan或http://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,对单个元素的查询不再需要任何连接。使用status
和mime-type
的查询将加入这两个查找的结果,而旧的XML必须从三个查找加入。作为附带的好处,XML也更容易让人阅读和理解。