2017-09-15 13 views
2

실행 된 검색의 특정 필드에서 가장 일반적으로 사용되는 용어를 계산하려고합니다. 그런 다음 Map을 정렬하려하지만 순서에 성공하지 못했거나 작동 할 함수를 찾지 못했습니다.Marklogic -지도 정렬

지도를 올바르게 정렬하는 방법을 자세히 설명하는 문서를 누구 에게라도 알려주거나 가르쳐 줄 수 있습니까? 여기

내가 더로 (1 카운트 모든 것을 제거),지도를 통해 두 번째 루프를 시도하지 않으며, 그것에 의해 주문을 추가하려고 현재 샘플지도

<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