如何在路径范围索引中使用谓词

How to use predicate in path range index

我的要求是在带有谓词的 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>

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

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

简短的回答是肯定的,您可以创建这样的路径索引。但是,退后一步。您希望通过创建这样的索引获得什么?您可以使用该路径创建一个路径字段,这意味着您可以搜索高分学生的名字。你可以在上面放一个范围索引,这意味着你可以获得高分学生的名字。然后,如果你想为低分学生提供同样的服务,你就必须创建另一个字段。手头有名字并不能使访问完整学生的性能更高:您仍然需要每次都拉出整个 class。

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

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