xpath - 从大型数据库返回唯一元素值

标签 xpath xquery marklogic nosql

我有一个大型 ML 数据库设置(大约 40,000 个)不同的 XML 文件,需要从所有文件中获取唯一关键字元素的列表,其中每个文件有多个。

我使用了几个查询,每个查询都返回一个不同的问题

for $doc in (cts:search(fn:collection(), cts:element-query(xs:QName("kwd"),())))
return fn:distinct-values($doc/article/.../kwd/string())

扩展树缓存已满

for $doc in fn:distinct-values(cts:search(/article/.../kwd, cts:element-query(xs:QName(()),())))
return $doc

这会返回一个唯一结果列表,但需要很长时间才能加载,并在输出前面加上“xs:UntypedAtomic(...”。在返回查询中使用 string() 表示“这不是一个节点”

我怎样才能让它工作?

最佳答案

没有索引:

fn:distinct-values(collection()/article//kwd)

该解决方案的扩展性不佳,而且可能很慢。我建议在元素 kwd 或路径article//kwd 上添加范围索引。然后使用类似的方法来获取唯一值(从元素范围索引):

cts:element-values(xs:QName('kwd'))

对于路径范围索引,您需要使用 cts:values() 。这些值词典会在亚秒(最高低于毫秒)内给出响应。

呵呵!

关于xpath - 从大型数据库返回唯一元素值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27981165/

相关文章:

xml - SQL 查询 varchar(max) 列中的 xml 属性

database - 不匹配序列类型 : xs:integer

html - 简单的 Xpath 难题

xml - XSLT——将文本节点的值解释为 XPath 查询(并在转换中使用它)

jquery - 无法使用 xpath 定位人体部位图像的元素

javascript - Marklogic 查询以获取数据库中存在的所有文档

xquery - MarkLogic 连接查询

java - Selenium Web 表 java.lang.IndexOutofBoundsException : Index: 1, 大小:1

xquery - 在 XQuery 中更新计数器

xml - 复杂 XSD 比较