首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用MarkLogic

使用MarkLogic
EN

Stack Overflow用户
提问于 2015-08-28 10:26:20
回答 1查看 488关注 0票数 0

我想使用MarkLogic的运行以下查询,但似乎找不到正确的方法。查询如下:

代码语言:javascript
复制
xquery version "1.0-ml";

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

declare variable $searchQuery as xs:string external ;
declare variable $aggregateFunc as xs:string external ;

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

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

let $r :=
  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
  )

return <result>{$r}</result>

我已经使用MarkLogic XCC实现了以下查询,但需要知道如何使用Client实现相同的查询。

根据讨论,我形成了以下查询,但是它仍然没有返回任何结果,如果有什么问题请告诉我。

代码语言:javascript
复制
QueryManager queryMgr = client.newQueryManager();

ServerConfigurationManager configManager = client.newServerConfigManager();
configManager.newNamespacesManager();
QueryOptionsManager optionsMgr = configManager.newQueryOptionsManager();

optionsMgr.writeOptions(VALUE_OPTION, new StringHandle(VALUE_OPTIONS));
StringQueryDefinition qd = queryMgr.newStringDefinition(VALUE_OPTION);
qd.setCriteria("ticker:CSGN.VX AND (dateRange GE \"2015-08-07\" AND dateRange LE \"2015-08-21\")");

ValuesDefinition vdef = 
    queryMgr.newValuesDefinition("closingPrice", VALUE_OPTION);


vdef.setQueryDefinition(qd);

vdef.setAggregate("avg");

ValuesHandle results = queryMgr.values(vdef, new ValuesHandle());
StringHandle strResults=queryMgr.values(vdef, new StringHandle());

如果价值选项是:

代码语言:javascript
复制
  <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>
<values name="closingPrice">
  <range type="xs:double">
    <element ns="" name="closingPrice"/>
  </range>
</values>
</options>
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-08-28 13:41:00

安基塔:

使用Java API,

83836

首先,持久化定义范围约束和值定义的查询选项:

代码语言:javascript
复制
<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>
<values name="closingPrice">
  <range type="xs:double">
     <element ns="" name="closingPrice"/>
  </range>
</values>
</options>

https://github.com/marklogic/java-client-api/blob/master/src/main/java/com/marklogic/client/example/cookbook/StringSearch.java#L73-L91

http://docs.marklogic.com/javadoc/client/com/marklogic/client/admin/QueryOptionsManager.html#writeOptions%28java.lang.String,%20com.marklogic.client.io.marker.QueryOptionsWriteHandle%29

然后,为range约束构造一个字符串查询,用string查询创建一个值定义,并对该值定义执行一个值查询--如下所示:

代码语言:javascript
复制
QueryManager queryMgr = client.newQueryManager();

StringQueryDefinition querydef = queryMgr.newStringDefinition(
    OPTIONS_NAME);
querydef.setCriteria(QUERY_TEXT);

ValuesDefinition valuesdef = queryMgr.newValuesDefinition(
    "closingPrice", OPTIONS_NAME);
valuesdef.setQueryDefinition(querydef);

// or any other handle
StringHandle readHandle =
    queryMgr.values(valuesdef, new StringHandle());

http://docs.marklogic.com/javadoc/client/com/marklogic/client/query/QueryManager.html#newStringDefinition%28java.lang.String%29

http://docs.marklogic.com/javadoc/client/com/marklogic/client/query/QueryManager.html#newValuesDefinition%28java.lang.String,%20java.lang.String%29

http://docs.marklogic.com/javadoc/client/com/marklogic/client/query/ValuesDefinition.html#setQueryDefinition%28com.marklogic.client.query.ValueQueryDefinition%29

http://docs.marklogic.com/javadoc/client/com/marklogic/client/query/QueryManager.html#values%28com.marklogic.client.query.ValuesDefinition,%20T%29

希望这有帮助,

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32268840

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档