2017-09-15 51 views
2

我想从执行搜索的特定字段中计算最常用的术语。然后,我尝试对Map进行排序,但是没有通过命令或找到任何可行的功能取得任何成功。Marklogic - 排序地图

任何人都可以建议或指出我详细说明如何正确排序地图的文档?

下面是一个简单的地图

<map:map xmlns:map="http://marklogic.com/xdmp/map" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xmlns:xs="http://www.w3.org/2001/XMLSchema"> 
    <map:entry key="Orlando"> 
    <map:value xsi:type="xs:integer">2</map:value> 
    </map:entry> 
    <map:entry key="Christiantiy"> 
    <map:value xsi:type="xs:integer">3</map:value> 
    </map:entry> 
    <map:entry key="Fort Lauderdale"> 
    <map:value xsi:type="xs:integer">2</map:value> 
    </map:entry> 
    <map:entry key="Key West"> 
    <map:value xsi:type="xs:integer">3</map:value> 
    </map:entry> 
    <map:entry key="David Robinson"> 
    <map:value xsi:type="xs:integer">2</map:value> 
    </map:entry> 
    <map:entry key="Florida"> 
    <map:value xsi:type="xs:integer">8</map:value> 
    </map:entry> 
    <map:entry key="test"> 
    <map:value xsi:type="xs:integer">2</map:value> 
    </map:entry> 
</map:map> 

现在我通过地图试图第二循环,(除去用1个计数的一切),并试图通过增加一个为了它,没有运气。

let $_ := 
    for $tag in map:keys($temp) 
    order by map:get($temp, $tag) 
    return 

     if (map:get($temp, $tag) = 1) then 
     () 
     else 
     let $_ := map:put($temp2, $tag, map:get($temp,$tag)) 
     return $_ 

return $temp2 

回答

2

我想通了。

这是我的解决方案。

我不使用搜索并尝试手动计数记录,而是使用按频率排序的cts:values。我从关键字中创建单个地图:值,以便在添加到较大的地图时不会丢失订单。

然后将那些单独的地图添加到一个集合,该集合可以转换为JSON。

let $current_epoch := xs:int(fn:substring(fn:string(xdmp:wallclock-to-timestamp(fn:current-dateTime())),0,11)) 

let $temp := map:map() 

let $test := (
    for $tag in cts:values(cts:element-reference(xs:QName('value')),(),"frequency-order",cts:and-query((
     cts:json-property-range-query('creationdate', '<=', $current_epoch), 
     cts:json-property-range-query('creationdate', '>=', $current_epoch - 172800) 
     ))) 
    let $map := map:map() 
    let $_ := map:put($map, $tag, cts:frequency($tag)) 
    return xdmp:to-json($map) 
) 
+0

map:map是一个散列表,它的键总是有不可预知的顺序。这同样正式适用于JSON。然后再次,你实际上在这里返回一个**序列**的JSON对象,并且序列确实有序。 – grtjn