检索MarkLogic 9中的所有文档计数变化

问题描述 投票:3回答:1

我最近从MarkLogic-8升级到MarkLogic-9,我在MarkLogic-8中拥有以下一组文档,

Collection - System, User
Document URI - /user.xml

Collection - System, Role
Document URI - /role.xml

Collection - System, Admin
Document URI - 1.   /systemadmin.xml
               2.   /accountadmin.xml

以下是我用来从集合中检索所有文档的示例java代码片段

String[] collections = {"System", "Admin"};
QueryManager queryMgr = client.newQueryManager();
SearchHandle resultsHandle = new SearchHandle();

StringQueryDefinition query = queryMgr.newStringDefinition();
query.setCollections(collections);
queryMgr.setPageLength(Long.parseLong(UIParam.PAGINATION_PAGE_LENGTH));
queryMgr.search(query, resultsHandle);

当我在MarkLogic-8上执行上面的java代码片段时,我得到/systemadmin.xml和accountadmin.xml作为结果,这是正确的结果,

但是现在当我对MarkLogic-9执行上面的代码时,我得到了所有文件/user.xml,/ rox.xml,/ sysmadmin.xml,/ accountadmin.xml,这是错误的结果。

<dependency>
  <groupId>com.marklogic</groupId>
  <artifactId>marklogic-client-api</artifactId>
  <version>4.1.0</version>
</dependency>

MarkLogic-9的Maven依赖

我很困惑,为什么MarkLogic-8和MarkLogic-9结果之间存在差异。

请帮我解决这个问题。

marklogic marklogic-8 marklogic-9
1个回答
4
投票

MarkLogic 9修复了一个错误,该错误将收集列表的语义从与OR相关的AND相关联:

http://docs.marklogic.com/guide/relnotes/chap4#id_76507

要在Java API中获取与AND相关的语义,可以使用StructuredQueryBuilder在CollectionQuery数组上指定AndQuery。用类似于follow sketch的替换现有查询应该有效:

StructuredQueryBuilder qb = StructuredQueryBuilder();
StructuredQueryDefinition query = qb.and(qb.collection("System"), qb.collection("Admin"));
queryMgr.setPageLength(Long.parseLong(UIParam.PAGINATION_PAGE_LENGTH));
queryMgr.search(query, resultsHandle);

有关collection()查询构建器的更多信息,请参阅:

http://docs.marklogic.com/javadoc/client/com/marklogic/client/query/StructuredQueryBuilder.html#containerQuery-com.marklogic.client.query.StructuredQueryBuilder.ContainerIndex-com.marklogic.client.query.StructuredQueryDefinition-

希望有所帮助,

© www.soinside.com 2019 - 2024. All rights reserved.