Поиск документа XML в MarkLogic для обработки инструкции - PullRequest
0 голосов
/ 31 августа 2018

У меня есть следующий код:

cts:and-query((
cts:element-word-query(xs:QName("primaryie"), $textname, "case-insensitive"),
cts:element-query(xs:QName("beginpage"),
cts:and-query(()))
))

но хотел бы добавить cts:or-query, чтобы найти подсвеченную "страницу документации", но не могу понять, что использовать. Я пытался cts:element-query, но я думаю, что это не элемент. Это похоже на маркер или что-то. Есть предложения?

enter image description here

1 Ответ

0 голосов
/ 31 августа 2018

В настоящее время не существует способа создания индекса для processing-instruction() (с использованием path-range-index или другого).

Если вы уже используете образец конверта , вы можете материализовать это processing-instruction() как элемент в вашем конверте, т.е. <docpage num="i"/>, а затем использовать cts:element-attribute-value-query()

cts:and-query((
  cts:element-word-query(xs:QName("primaryie"), $textname, "case-insensitive"),
  cts:or-query((
    cts:element-query(xs:QName("beginpage"),
    cts:element-attribute-value-query(xs:QName("docpage"), xs:QName("num"), "i")
  ))
))

Или вы можете создать свойство документа и затем использовать cts:properties-fragment-query()

cts:and-query((
  cts:element-word-query(xs:QName("primaryie"), $textname, "case-insensitive"),
  cts:or-query((
    cts:element-query(xs:QName("beginpage"),
    cts:document-fragment-query(
      cts:element-attribute-value-query(xs:QName("docpage"), xs:QName("num"), "i")
    )
  ))
))

В противном случае вам потребуется выполнить фильтрацию с помощью XPath для результатов поиска.

cts:search(doc(),
  cts:element-word-query(xs:QName("primaryie"), $textname, "case-insensitive")
)[book/(beginpage or processing-instruction("docpage") = 'num="i"')]

Для этого потребуется фильтрация (чтение сопоставленных документов), поэтому скорость ответа на этот запрос будет зависеть от количества документов, возвращаемых по критериям поиска, и от ограничений на количество документов, которые вы хотите вернуть.

...