我有一个大型 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/