【问题标题】:How to use predicate in path range index如何在路径范围索引中使用谓词
【发布时间】:2020-01-27 07:47:36
【问题描述】:

我的要求是用谓词在 MarkLogic 中创建 路径范围索引

获取这个 XML -

<class>
       <student rollno = "393">
          <firstname>shivling</firstname>
          <lastname>Bhandare</lastname>
          <marks>85</marks>
       </student>
       <student rollno = "493">
          <firstname>abc</firstname>
          <lastname>pqr</lastname>
          <marks>95</marks>
       </student>
  </class>

这里我想用谓词/class/student[marks gt 80]/firstname为xpath创建路径范围索引。

我们可以使用路径范围索引来实现吗?

【问题讨论】:

    标签: marklogic marklogic-8 marklogic-9


    【解决方案1】:

    简短的回答是肯定的,您可以创建这样的路径索引。不过,稍微退后一点。您希望从创建这样的索引中获得什么?您可以使用该路径创建一个路径字段,这意味着您可以搜索高分学生的名字。您可以在其上放置一个范围索引,这意味着您可以获得高分学生的名字。然后,如果您希望对分数低的学生也一样,则必须另选一个领域。掌握名字并不会提高访问完整学生的性能:您仍然需要每次都拉动整个班级。

    如果您需要询问有关个别学生的问题,您很可能真的想创建一个更简洁的 1-object/1-document 数据模型。那么你不需要特殊的路径来获取高分学生,你只需要一个分数范围索引,你可以将它作为一个简单的查询,并从结果中提取你想要的,例如

    cts:search(/student, cts:element-range-query(xs:QName("marks"), ">", 80) )/firstname
    

    【讨论】:

    • 如果您将学生存储为单独的文档,并且在名字上有一个范围索引,您还可以使用 cts:values。比如:cts:values(cts:element-reference(xs:QName('firstname')), (), (), cts:element-range-query(xs:QName("marks"), "&gt;", 80))
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-30
    • 2018-11-06
    • 2020-07-30
    相关资源
    最近更新 更多