marklogic - 使用distinct-values

时间:2018-04-05 16:05:06

标签: marklogic

我尝试从文档中获取不同的值。但它总是返回重复值。

for $uri in cts:uris((),
                     (),
                     cts:and-query(
                       cts:collection-query("/citation/company")
                 )
         )[1 to 1000]
return distinct-values( doc($uri)/PerformingOrganizations/Name)

result: 
   EARTH RESEARCH LLC
   EARTH RESEARCH LLC
   EARTH RESEARCH LLC
   EARTH RESEARCH LLC
   EARTH RESEARCH LLC

为什么distinct-values返回重复值?如何获得结果消除重复值。提前谢谢。

2 个答案:

答案 0 :(得分:3)

您在迭代器范围内调用$uri,因此每distinct-values调用一次。首先收集您的值序列,然后为所有值调用let $values := for $uri in cts:uris((), 'limit=1000', cts:and-query(cts:collection-query("/citation/company"))) return doc($uri)/PerformingOrganizations/Name return distinct-values($values)

cts:uris

此外,Unresolved Reference是一个词典函数,它将返回索引中的每个结果,除非受options参数的特别限制。限制使用谓词将导致词典调用首先返回其结果的全部,然后序列将被限制为前1000.使用选项来限制将导致该函数仅返回第一个1000结果。对于具有多个值的索引,不使用这些选项可能会导致性能问题。

答案 1 :(得分:0)

希望这个XQuery对你有所帮助。试试这个。

let $uris := cts:uri-match(('*.xml'),(),cts:collection-query("/citation/company"))
let $name := for $uri in $uris
             return doc($uri)/PerformingOrganizations/Name/text()

return fn:distinct-values($name)