2

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

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

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

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

some_data 元素为空。因此,如果我在some_data_idelement-range-index上进行了设置,那么什么是高效的 XQuery 查询,它可以让我删除所有空的查询?

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

而如果我在cts:search查询中这样做,那么它会更有效,例如在将数据拉回之前过滤数据?

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

4

1 回答 1

5

我认为您不需要范围索引来有效地执行此操作。通过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(())))
  )
)
于 2015-08-19T17:40:14.617 回答