基于xml值的Marklogic索引创建

基于xml值的Marklogic索引创建,marklogic,Marklogic,XML结构如下所示: <division> <sub-divison> <name> mime-type </name> <value> .jpeg </value> </sub-divison> <sub-divison> <name>

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>
<division>
 <sub-divison>
   <mime-type>.jpeg</mime-type>
   <status>.jpeg</status>
 </sub-divison>
</division>

mime类型
.jpeg
地位
正在进行的工作

我需要索引mime类型状态。应该使用什么类型的索引机制,
路径范围索引
或其他?不知怎的,我觉得这不合适。请建议。

您不必做任何事情。MarkLogic会自动为元素值、元素属性值和单词编制索引。因此,无需任何配置更改,就可以编写XPath表达式并为
name
value
构造cts:query术语。这些将使用内置的元素值索引。尝试一下,看看它是否足够快,适合您的应用程序。如果不是,问题可能出在查询中,而不是索引中。您可以使用或来查看使用了哪些索引

不过,仍有一些改进的余地。在XML中,
元素在
名称
元素也被检查之前没有什么意义。通过类比,考虑当你有一个列“代码>代码>名称/代码>和一个列<代码>值< /代码>时,SQL会做什么,并且想要选择<代码>哪里名字=?和值=?。SQL evaluator必须按
名称
查找,按
查找,并加入结果。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>
<division>
 <sub-divison>
   <mime-type>.jpeg</mime-type>
   <status>.jpeg</status>
 </sub-divison>
</division>

.jpeg
.jpeg

使用这样的XML,对单个元素的查询不再需要任何连接。同时使用
状态
mime类型
的查询将连接这两个查找的结果,而旧XML必须从三个查找中连接。作为附带利益,该XML也更容易让人阅读和理解。

感谢您的快速响应。最初XML格式是按照您建议的方式,但现在需求发生了变化,我将以我提到的格式获取XML。我有您建议的XML类型和状态的元素范围索引,但使用了新的元素范围索引的格式是否有用?我想没有,但这取决于您对这些元素所做的操作。除了搜索之外,我可以使用我发布的新xml格式执行所有操作。我需要搜索mime类型或状态等字段。对于旧的xml格式,我使用search:search api以及语法、单词和值约束。如何使用当前的xml格式执行此操作。不能将约束添加为xpath表达式。我还需要强调一下,我想你关于索引XML值的问题已经得到了回答。但是您可以发布一个关于如何最好地使用搜索的新问题:将搜索API与XML结合使用。