使用 MarkLogic Java 客户端 API
Working with MarkLogic Java Client API
我想使用 MarkLogic 的 Java 客户端 API 运行 以下查询,但似乎找不到正确的方法。
查询如下:
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 实现了以下查询,但需要知道如何使用客户端实现相同的查询 API。
根据讨论,我形成了以下查询,但它仍然没有 return 任何结果,如果有问题请告诉我。
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());
其中值选项是:
<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>
安基塔:
使用 Java API,
http://docs.marklogic.com/guide/java/searches#id_83836
首先保留定义范围约束和值定义的查询选项:
<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>
然后,为范围约束构造一个字符串查询,一个带有字符串查询的值定义,并对值定义执行一个值查询——如下所示:
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());
希望对您有所帮助,
我想使用 MarkLogic 的 Java 客户端 API 运行 以下查询,但似乎找不到正确的方法。 查询如下:
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 实现了以下查询,但需要知道如何使用客户端实现相同的查询 API。
根据讨论,我形成了以下查询,但它仍然没有 return 任何结果,如果有问题请告诉我。
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());
其中值选项是:
<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>
安基塔:
使用 Java API,
http://docs.marklogic.com/guide/java/searches#id_83836
首先保留定义范围约束和值定义的查询选项:
<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>
然后,为范围约束构造一个字符串查询,一个带有字符串查询的值定义,并对值定义执行一个值查询——如下所示:
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());
希望对您有所帮助,