【发布时间】:2017-11-02 12:27:26
【问题描述】:
我们正在尝试使用元素范围索引跨文档检索特定元素的不同值。我们希望结果仅限于属于特定集合的文档。
文档在逻辑上被隔离到不同的集合中——比如“basedata”集合保存所有应用程序基础数据文档,“transactiondata”集合保存所有传入/传出到我们应用程序的事务。
现在的要求是将范围索引限制为仅基础数据集合文档,而不是事务数据集合文档。
- 为 entityName 创建了元素范围索引
2。 编写以下代码以使用元素范围索引和 search:range
String valueOptionString =
" <search:options xmlns:search="http://marklogic.com/appservices/search">
<search:values name="entityName">
<search:range type="xs:string">
<search:element name="entityName"/>
</search:range>
</search:values>
<search:additional-query>
<cts:collection-query xmlns:cts="http://marklogic.com/cts">
<cts:uri>basedata</cts:uri>
</cts:collection-query>
</search:additional-query>
</search:options> ";
QueryManager queryMgr = client.newQueryManager();
QueryOptionsManager optionsMgr = client.newServerConfigManager().newQueryOptionsManager();
optionsMgr.writeOptions("DistinctValues", new StringHandle(valueOptionString));
ValuesDefinition vdef = queryMgr.newValuesDefinition("entityName", "DistinctValues");
ValuesHandle vh = queryMgr.values(vdef, new ValuesHandle());
for (CountedDistinctValue value : vh.getValues()) {
System.out.println("Distinct value is :: " +
value.get("xs:string", String.class));
}
上面的代码应该将结果限制在 basedata 集合中的文档,但没有按预期工作
基础数据集合中的文档:
<?xml version="1.0" encoding="UTF-8"?>
<entity>
<entityName>Company</entityName>
<createdBy>CompanyOwner</createdBy>
<createdDate>2017-01-01T05:56:35.360Z</createdDate>
<status>Active</status>
<entityattributes>
<entityattribute>
</entityattribute>
</entityattributes>
</entity>
事务数据集合中的文档:
<?xml version="1.0" encoding="UTF-8"?>
<entity>
<entityName>DistinctValueTestEntity</entityName>
<createdBy>DistinctValuteSystemNew</createdBy>
<createdDate>2017-01-03T05:56:35.360Z</createdDate>
<status>Active</status>
<entityattributes>
<entityattribute>
</entityattribute>
</entityattributes>
</entity>
Java 代码的输出:
Company,DistinctValueteSystemNew
上述结果是错误的,因为我没有在 cts:uri
中包含 transactiondata 集合,因此不应考虑 DistinctValueteSystemNew【问题讨论】:
标签: marklogic marklogic-8