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

时间:2019-09-27 02:08:01

标签: marklogic marklogic-8 marklogic-9

我的要求是在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创建路径范围索引。

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

1 个答案:

答案 0 :(得分:4)

简短的回答是,您可以创建一个这样的路径索引。但是,请后退一点。您希望从创建这样的索引中获得什么?您可以使用该路径创建一个路径字段,这意味着您可以搜索分数较高的学生的名字。您可以在其上放一个范围索引,这意味着您可以得到分数较高的学生的名字。然后,如果您希望分数较低的学生也能做到这一点,则必须另辟field径。而且拥有名头并不能使整个学生都表现得更好:您仍然每次都需要全班参加。

如果您需要询问有关个别学生的问题,您很可能真的想创建一个更简洁的1对象/ 1文档数据模型。这样一来,您就无需获得高分学生的特殊途径,只需要分数的范围指数即可,您可以将其作为一个简单的查询,然后从结果中选择想要的东西,例如

import java.util.Random;

public class Monster {
    // Monster properties
    private String name;
    private int health;
    private int damage;

    // Random damage points that vary from 1 to 5
    int randomDamagePoints = (int)(Math.random() * 1 + 5);

    // Constructor
    public Monster(String name, int health, int damage) {
        this.name = "Monster";
        this.health = 50;
        this.damage = 2;
    }

    // Opponent attacks Monster 1 - Player
    public void AttackPlayer(Monster player) {
        while(health > 0) {
            // Part I need help with
        }
    }

    // Player attacks Monster 2 - Opponent
    public void AttackOpponent(Monster opponent) {
        while(health > 0) {
            // Part I need help with
        }
    }
}