如何在路径范围索引中使用谓词
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
我的要求是在带有谓词的 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