高效的XQuery查询,用于确定元素不存在的文档

时间:2015-08-19 16:54:15

标签: xquery marklogic marklogic-8

假设我在这样的集合中有大约5000万条记录:

<record>
  <some_data>
    <some_data_id>112423425345235</some_data_id>
  </some_data>
</record>

所以我可能有一百万条记录(坏数据),如下所示:

<record>
  <some_data>
  </some_data>
</record>

some_data元素为空。 因此,如果我在 some_data_id 上设置element-range-index,那么有效的XQuery查询会给我删除所有空的查询吗?

我认为我正在寻找的是一个不是 FLWOR 的查询,您可以在其中检查每个元素是否存在子记录,因为我认为效率低(即将数据拉回来)然后过滤)?

然而,如果我在cts:search查询中执行此操作,那么它会更高效,就像在将数据拉回之前过滤数据一样?

请写一个能够有效执行此操作的查询,并确认我对 FLWOR 语句的假设是否正确。

1 个答案:

答案 0 :(得分:5)

我认为您不需要范围索引来有效地执行此操作。使用&#34;通用&#34;通过cts:query构造函数的元素索引应该没问题:

cts:element-query(xs:QName('record'),
  cts:element-query(xs:QName('some_data'),
    cts:not-query(cts:element-query(xs:QName('some_data_id'), cts:and-query(())))
  )
)