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

Marklogic 如何在路径范围索引中使用谓词,marklogic,marklogic-8,marklogic-9,Marklogic,Marklogic 8,Marklogic 9,我的要求是使用谓词在MarkLogic中创建路径范围索引 以XML为例- <class> <student rollno = "393"> <firstname>shivling</firstname> <lastname>Bhandare</lastname> <marks>85</marks> </stu

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

颤抖
班达里
85
abc
pqr
95
这里我想用谓词
/class/student[marks gt 80]/firstname
为xpath创建路径范围索引


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

简单的回答是可以的,您可以创建这样的路径索引。然而,退一步。你希望从创建这样一个索引中获得什么?您可以使用该路径创建路径字段,这意味着您可以搜索高分学生的名字。你可以在上面放一个范围索引,这意味着你可以得到高分学生的名字。如果你想让分数低的学生也一样,你就得另找一个领域。而且,拥有第一个名字并不会让访问完整的学生变得更加高效:你仍然需要每次都拉整个班级

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

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

简单的回答是肯定的,您可以创建这样的路径索引。然而,退一步。你希望从创建这样一个索引中获得什么?您可以使用该路径创建路径字段,这意味着您可以搜索高分学生的名字。你可以在上面放一个范围索引,这意味着你可以得到高分学生的名字。如果你想让分数低的学生也一样,你就得另找一个领域。而且,拥有第一个名字并不会让访问完整的学生变得更加高效:你仍然需要每次都拉整个班级

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

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

如果您将学生存储为单独的文档,并且在firstname上有一个范围索引,那么还可以使用cts:values。类似于:
cts:values(cts:element引用(xs:QName('firstname'),(),(),cts:element范围查询(xs:QName(“marks”),“>”,80))
如果您将学生存储为单独的文档,并且firstname上有一个范围索引,那么您还可以使用cts:values。类似于:
cts:values(cts:element引用(xs:QName('firstname')),(),(),cts:element范围查询(xs:QName(“marks”),“>”,80))