在MarkLogic中使用聚合函数

时间:2015-08-21 10:07:09

标签: aggregate-functions marklogic

我有这样的XML。

xquery version "1.0-ml";
import module namespace search =  "http://marklogic.com/appservices/search" at "/MarkLogic/appservices/search/search.xqy";

search:search(
  'ticker:CSGN.VX AND (dateRange GE "2015-08-07" AND dateRange LE "2015-08-21")', 
  <options xmlns="http://marklogic.com/appservices/search">
    <constraint name="dateRange">
      <range type="xs:date" facet="false">
        <element ns="" name="date"/>
      </range>
    </constraint>
    <constraint name="ticker">
      <range type="xs:string" >
        <element ns="" name="ticker"/>
      </range>
    </constraint>
  </options>)

我将在不同年份为不同的公司提供类似的XML。现在我想在特定的持续时间内搜索具有CSGN.VX代码的文档,因此我使用此查询。

# Get Websites/webapps
$websites = Get-AzureWebsite | where-object -FilterScript{$_.state -eq 'Running' }

# Stop each website
foreach -parallel ($website In $websites)
{
    $result = Stop-AzureWebsite $website.Name
    if($result)
    {
        Write-Output "- $($website.Name) did not shutdown successfully"
    }
    else
    {
        Write-Output "+ $($website.Name) shutdown successfully"
    }
}

有没有办法与文档搜索一起,我还可以获得特定时间段的closingPrice平均值?

我刚刚得到了一个解决方案,但我有一个进一步的查询,我正在寻找一种方法来实现这个使用Marklogic的Java客户端API,所以有没有办法实现搜索:解析和搜索:使用Java客户端API的值

我知道实现这一点的一种方法是通过MarklogicXCC API,但我想知道是否有一种方法可以使用Client API运行这些函数

1 个答案:

答案 0 :(得分:1)

如果你在closingPrice上有一个范围索引,你应该可以这样做:

xquery version "1.0-ml";

import module namespace search =  "http://marklogic.com/appservices/search"at "/MarkLogic/appservices/search/search.xqy";

let $query :=
  search:parse(
    'ticker:CSGN.VX AND (dateRange GE "2015-08-07" AND dateRange LE "2015-08-21")',

    <options xmlns="http://marklogic.com/appservices/search">
      <constraint name="dateRange">
        <range type="xs:date" facet="false">
           <element ns="" name="date"/>
        </range>
      </constraint>
      <constraint name="ticker">
        <range type="xs:string" >
           <element ns="" name="ticker"/>
        </range>
      </constraint>
    </options>,

    "search:query"
  )

return
  search:values(
    'closingPrice', 

    <options xmlns="http://marklogic.com/appservices/search">
      <values name="closingPrice">
        <range type="xs:double">
           <element ns="" name="closingPrice"/>
        </range>
        <aggregate apply="avg"/>
      </values>
    </options>,

    $query
  )

注意:我建议单独存储每个stockData,否则dateRange过滤器可能无法按预期工作。

HTH!