我正在尝试通过查询分配策略对Marklogic 9进行分层。我在" Documents"中创建了2层(作为分区)。分区名称为的数据库:
在数据库文档中存储为JSON,我想根据" DYil"文件的财产。
db:中存在的示例JSON doc
{
"Yerlesim": "Izmir",
"Ad": "AAA",
"@timestamp": "2018-06-02T21:16:23.647Z",
"SoyAd": "BBB",
"@version": "1",
"DYil": "2010-01-01",
"host": "dhcppc6",
"Yas": 8,
"type": "testA",
}
根据Marklogic文档,按照以下说明完成数据库的配置:
分区Part2的已分配查询是:
<partition-query-properties xmlns="http://marklogic.com/manage/partition-query/properties">
<partition-number>2</partition-number>
<query>
<cts:json-property-range-query operator="<" xmlns:cts="http://marklogic.com/cts">
<cts:property>DYil</cts:property>
<cts:value xsi:type="xs:date" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">1960-01-01</cts:value>
</cts:json-property-range-query>
</query>
</partition-query-properties>
通过调用http://localhost:8002/manage/v2/databases/Documents/partition-queries
但是当我将数据加载到Marklogic时,即使我强制重新平衡工作,所有数据都会加载到默认分区并保持在那里。
Xquery控制台查询是:
cts:search(fn:collection(), cts:json-property-range-query("DYil", "<", xs:date("1960-01-01")), (), (), ts:partition-forests(xdmp:database("Documents"),"Part1"))
我根据Marklogic网站的建议,使用cts:json-property-range-query("DYil", "<", xs:date("1960-01-01"))
代码将cts:query expression <root>{cts:json-property-range-query("DYil", "<", xs:date("1960-01-01"))}</root>/node()
转换为XML格式。
错误日志中没有失败的日志记录,因此我怀疑分配的查询存在问题,但无法找到问题。
答案 0 :(得分:0)
WRT查询匹配,这里是我尝试检查一次的一些代码。在内容数据库中运行,它将检查分区查询并查看每个查询的匹配程度。
xquery version "1.0-ml";
declare namespace ts = 'http://marklogic.com/xdmp/tieredstorage';
let $xpath := "
declare namespace ts = 'http://marklogic.com/xdmp/tieredstorage';
/ts:partition-query
"
for $pq in xdmp:eval ($xpath, (), <options xmlns='xdmp:eval'><database>{xdmp:schema-database()}</database></options>)
let $query := cts:query ($pq/ts:query/*)
let $number := $pq/ts:partition-number/fn:data ()
let $matched := xdmp:estimate (cts:search (/, $query))
return ('query is: ', $pq, 'cts q is: ', $query, 'p# is: ', $number, '# docs matched is:', $matched)