xquery - 高效的 XQuery 查询来确定不存在元素的文档

标签 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 语句的假设是否正确。

最佳答案

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

关于xquery - 高效的 XQuery 查询来确定不存在元素的文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32101375/

相关文章:

sparql - 如何优化返回可选属性的 SPARQL 查询?

xquery - 使用 XQuery 标准化 XML 每个元素中的空间

sql - 甲骨文11g : XQuery results concatenated in a single SQLXML type

json - 在 XQuery 和 Marklogic 8 中更新 JSON

马克逻辑 8 : delete in bulk

marklogic - 如何在marklogic服务器中编写保留策略以将当前版本与其旧版本分离到不同的集合中?

xquery - Marklogic 6如何使用xquery获取属性值?

Marklogic 中的 Xquery 返回距离当前日期小于 1 个月的日期时间

xml - XQuery:同一模块中有两个 namespace ?

XQuery 3.0 相当于 xquery 1.0 版本中的 group by