2017-09-15 37 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