Получить все документы различное в MarkLogic 9 - PullRequest
0 голосов
/ 07 сентября 2018

Я недавно обновился с 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);

Когда я выполняю приведенный выше фрагмент кода Java на MarkLogic-8, я получаю / 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>

Зависимость Maven для MarkLogic-9

Меня смущает, почему существует разница между результатами MarkLogic-8 и MarkLogic-9.

Пожалуйста, помогите мне решить эту проблему.

1 Ответ

0 голосов
/ 08 сентября 2018

В MarkLogic 9 исправлена ​​ошибка, из-за которой семантика списков коллекций изменялась с AND на связанные с OR:

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

Чтобы получить связанную с AND семантику в Java API, вы можете использовать StructuredQueryBuilder, чтобы указать AndQuery для массива CollectionQuery. Замена существующего запроса чем-то похожим на следующий эскиз должен работать:

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-

Надеясь, что помогает,

...