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

Tut*_*men 2 xquery marklogic marklogic-8

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

<record>
  <some_data>
    <some_data_id>112423425345235</some_data_id>
  </some_data>
</record>
Run Code Online (Sandbox Code Playgroud)

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

<record>
  <some_data>
  </some_data>
</record>
Run Code Online (Sandbox Code Playgroud)

some_data元素为空.所以如果我element-range-indexsome_data_id上有一个设置,那么什么是一个有效的XQuery查询,它会给我所有空的删除?

我认为我正在寻找的是一个不是FLWOR的查询,你检查每个元素的子记录的存在,因为我认为这是低效的(即拉回数据然后过滤)?

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

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

wst*_*wst 5

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

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(())))
  )
)
Run Code Online (Sandbox Code Playgroud)