Как использовать предикат в индексе диапазона пути - PullRequest
1 голос
/ 27 сентября 2019

Мне нужно создать Индекс диапазона пути в 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.

Можем ли мы достичь этого, используя Индекс диапазона пути ?

1 Ответ

3 голосов
/ 27 сентября 2019

Короткий ответ - да, вы можете создать индекс пути таким образом.Однако отступим немного.Что вы надеетесь получить от создания такого индекса?Вы можете создать поле пути с этим путем, что означает, что вы можете затем искать имена студентов с высокими баллами.Вы можете поставить индекс диапазона на это, что означает, что вы можете получить имена учеников с высокими баллами.Тогда, если вы хотите то же самое для студентов с низкими баллами, вам придется создать другое поле.А наличие имени под рукой не делает доступ к полному ученику более эффективным: вам все равно придется каждый раз вытягивать весь класс.

Скорее всего, вы действительно хотите создать более чистый 1-объект /Модель данных с 1 документом, если вам нужно задать вопросы об отдельных студентах.Тогда вам не нужен особый путь для достижения хороших результатов, вам просто нужен индекс диапазона для оценок, и вы можете сделать это простым запросом и выбрать из результатов то, что вы хотите, например,

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