高效的 XQuery 查询以确定元素不存在的文档

Efficient XQuery query to determine the documents where an element does NOT exist

假设我在这样的集合中有大约 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 语句的假设是否正确。

我认为您不需要范围索引来高效地执行此操作。通过 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(())))
  )
)