我正在尝试通过查询分配策略对 Marklogic 9 进行分层。我在“文档”数据库中创建了 2 层(作为分区),分区名称为:
- Part1 ,分区号为 1,默认分区(未分配查询)
- Part2,分区号为2
在数据库中,文档存储为 JSON,我想根据文档的“DYil”属性对它们进行分层。
db 中存在的示例 JSON 文档:
{
"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>
我可以看到通过调用通过rest api将查询正确分配给分区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"))
cts:json-property-range-query("DYil", "<", xs:date("1960-01-01"))
我使用<root>{cts:json-property-range-query("DYil", "<", xs:date("1960-01-01"))}</root>/node()
Marklogic 站点建议的代码将 cts:query 表达式转换为 XML 格式。
错误日志中没有失败的日志记录,所以我怀疑分配的查询有问题但无法定位问题。