我最近从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结果之间存在差异。
请帮助我解决此问题。
答案 0 :(得分:4)
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()查询生成器的更多信息,请参见:
希望有帮助,