2017-09-15 10 views
2

実行された検索の特定のフィールドから最もよく使われる用語を数えようとしています。私はマップをソートしようとしていますが、注文しても成功していないか、動作する関数が見つかりませんでした。Marklogic - マップの並べ替え

マップを正しく並べ替える方法を教えてくれる人は誰にでもアドバイスしてくれますか?ここで

なしで今、私は、(1の数ですべてを取り除く)、マップを介して第2のループにしようと、それに順を追加しようとしているサンプルマップ

<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> 

です運。

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

関連する問題