Marklogic - 对 map 进行排序

标签 marklogic

我正在尝试计算执行搜索的特定字段中最常用的术语。然后我尝试对 map 进行排序,但在 order by 方面没有取得任何成功,也没有找到任何可以工作的函数。

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

这是一个示例 map

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

现在我正在尝试对 map 进行第二次循环(删除计数为 1 的所有内容),并尝试向其中添加 order by,但没有成功。

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

最佳答案

我明白了。

这是我的解决方案。

我没有进行搜索并尝试手动计算记录数,而是使用 cts:values ,按频率排序。我用键:值制作单独的 map ,以便它们在添加到更大的 map 时不会丢失顺序。

然后将这些单独的映射添加到一个集合中,该集合可以转换为 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)
)

关于Marklogic - 对 map 进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46244911/

相关文章:

马克逻辑 CTS :search with sparql

marklogic - 有没有办法在 Marklogic 中搜索文档的开始日期和结束日期时间间隔并使用反向查询发送警报通知?

marklogic - 如何使用 ml-gradle 在 marklogic 中创建一个 FIELD?

javascript - 将参数传递给 MarkLogic 中的 JavaScript 转换

marklogic - 如何设置CORB日志来调试XQUery信息

xquery - 如何在 MarkLogic 中重命名文档?

java - 使用 Marklogic 的 Java API 和 JAXB 对文档进行列表/搜索/分页

marklogic - 元素词位置 - 概念性问题

xsd - MarkLogic 是否完全支持 XML Schema 1.1?

marklogic - 在 marklogic 中搜索二进制文件