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

时间:2015-01-16 09:48:25

标签: 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()说“这不是节点”

我怎样才能使这个工作?

1 个答案:

答案 0 :(得分:4)

没有索引:

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

此解决方案虽然规模不大,但可能很慢。我建议在元素kwd或路径文章// kwd上添加范围索引。然后使用类似的东西来获取唯一值(来自元素范围索引):

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

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

HTH!