Xquery 在MarkLogic中搜索XML文档以获取处理指令

Xquery 在MarkLogic中搜索XML文档以获取处理指令,xquery,marklogic,processing-instruction,Xquery,Marklogic,Processing Instruction,我有以下代码: cts:and-query(( cts:element-word-query(xs:QName("primaryie"), $textname, "case-insensitive"), cts:element-query(xs:QName("beginpage"), cts:and-query(())) )) 但是想添加一个cts:或查询,以查找高度突出的“docpage”,但不知道该使用什么。我尝试了cts:element查询,但我认为它不是一个元素。好像是个记号笔什么的。

我有以下代码:

cts:and-query((
cts:element-word-query(xs:QName("primaryie"), $textname, "case-insensitive"),
cts:element-query(xs:QName("beginpage"),
cts:and-query(()))
))
但是想添加一个
cts:或查询
,以查找高度突出的“docpage”,但不知道该使用什么。我尝试了
cts:element查询
,但我认为它不是一个元素。好像是个记号笔什么的。有什么建议吗


目前没有办法在
处理指令()上创建索引(使用路径范围索引或其他方式)

如果您已经在利用,则可以将该
processing-instruction()
具体化为信封中的元素,即
,然后使用

或者您可以创建一个文档属性,然后使用

否则,您需要通过XPath对搜索结果执行过滤

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

这需要过滤(读取匹配的文档),因此此查询的响应速度取决于从搜索条件返回的文档数量,以及您对返回的文档数量的限制。

Hello Mike,很高兴看到您试图查询的XML示例。docpage是一个处理指令。我认为你不能用cts。XPath可能可以工作,但在标记逻辑中可能很繁重。你能详细说明一下上下文吗?我在MarkLogic服务器上有3000个XML文档。我试图只查找包含和或“docpage”的文档。用户键入一个术语,例如“腹部”,然后在所有文档中搜索该术语。然后我从索引中获取页码。我想在文档中搜索docpage num=“页码”。然后,我从该页码中搜索索引中的术语,以便为该单词添加标记代码。感谢您的回复。我将在星期二回去工作时试一试。
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")
    )
  ))
))
cts:search(doc(),
  cts:element-word-query(xs:QName("primaryie"), $textname, "case-insensitive")
)[book/(beginpage or processing-instruction("docpage") = 'num="i"')]