MarkLogic:搜索文档时附加查询不起作用
我们正在尝试使用元素范围索引跨文档检索特定元素的不同值。我们希望结果仅限于属于特定集合的文档 文档在逻辑上被划分为不同的集合,如“basedata”集合(保存所有应用程序基础数据文档)和“transactiondata”集合(保存应用程序的所有传入/传出事务) 现在的要求是将范围索引仅限于basedata收集文档,而不是transactiondata收集文档MarkLogic:搜索文档时附加查询不起作用,marklogic,marklogic-8,Marklogic,Marklogic 8,我们正在尝试使用元素范围索引跨文档检索特定元素的不同值。我们希望结果仅限于属于特定集合的文档 文档在逻辑上被划分为不同的集合,如“basedata”集合(保存所有应用程序基础数据文档)和“transactiondata”集合(保存应用程序的所有传入/传出事务) 现在的要求是将范围索引仅限于basedata收集文档,而不是transactiondata收集文档 已创建元素范围索引:entityName 二,。 编写了下面的代码,将元素范围索引与搜索:范围一起使用 String valueOptio
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));
}
上述结果是错误的,因为我没有在cts:uri中包含transactiondata集合,因此不应将DistinctValuesSystemNew视为DistinctNew。查询选项中定义的查询仅适用于搜索请求,而不适用于值请求 通过使用setQueryDefinition()方法在值定义上设置查询,可以用查询约束值请求: 查询可以包含集合查询。在示例中:
<search:query>
<search:collection-query>
<search:uri>basedata</search:uri>
</search:collection-query>
</search:query>
基础数据
有关详细信息,请参阅:
希望有帮助
<?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>
Company,DistinctValueteSystemNew
<search:query>
<search:collection-query>
<search:uri>basedata</search:uri>
</search:collection-query>
</search:query>