检索所有文档计数在 MarkLogic 9 中有所不同

Retrieve All Document Count Varies in MarkLogic 9

我最近从 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, /role.xml, /systemadmin.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 9 修复了一个错误,该错误将集合列表的语义从 AND 相关更改为 OR 相关:

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

要在 Java API 中获取与 AND 相关的语义,您可以使用 StructuredQueryBuilder 在 CollectionQuery 数组上指定一个 AndQuery。用类似于以下草图的内容替换现有查询应该可行:

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-

希望对您有所帮助,