我有一个大型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()说“这不是节点”
我怎样才能使这个工作?
答案 0 :(得分:4)
没有索引:
fn:distinct-values(collection()/article//kwd)
此解决方案虽然规模不大,但可能很慢。我建议在元素kwd或路径文章// kwd上添加范围索引。然后使用类似的东西来获取唯一值(来自元素范围索引):
cts:element-values(xs:QName('kwd'))
对于路径范围索引,您需要使用cts:values()。这些值词典在亚秒内给出响应,最高可达毫秒以下。
HTH!