2016-11-17 4 views
0

Я хотел бы запросить репозиторий jackrabbit в версиях, которые я сохранил.Запрос JCR для возврата выдержки и родительского идентификатора

Мой репозиторий выглядит следующим образом:

JCR repo structure

После XPATH запроса работает хорошо: //element(*, nt:frozenNode)[jcr:contains(., '" + keyword + "') ]/rep:excerpt(.) и из объекта Row вернулся я могу получить отрывок найти в де: «де: содержание» шаблонных узлов свойство (для того, чтобы это было полнотекстовое индексирование, у меня есть своя конфигурация lucene).

Проблема состоит в том, что: как узнать, какие элементы excerpt найдены, поскольку запрос возвращает мне только найденный путь (/ jcr: system/jcr: versionStorage/95/c8/3e/95c83efc-8441-4017- b3af-ae7be49f07e5/1.0/jcr: frozenNode/de: template) и сама выдержка.

Поэтому я хотел бы знать идентификатор nt: versionИстория, хранящаяся в Jackrabbit.

У меня есть решение для этого, а также путем не получить родительские узлы до нта: versionHistory достигается и получить его идентификатор:

Row row = (Row) rows.next(); 
Node node = row.getNode(); 
Node frozenNode = node.getParent(); 
Node versionNumber = frozenNode.getParent(); 
String versionId = versionNumber.getIdentifier(); 

Однако это занимает слишком много времени и с большим количеством версий его плохих для исполнения.

Profiling JCR Query and getting nodes

Поэтому мне интересно, если это возможно, чтобы включить этот идентификатор версии в запросе, например, что никакие родительские узлы не должны быть выбраны после того, как запрос будет выполнен.

ответ

0

Возможно, это невозможно с помощью запроса XPath. Но вы можете сделать это, используя SQL2, используя соединение:

SELECT n.*, excerpt(n), v.[jcr:uuid] 
FROM [nt:frozenNode] AS n 
INNER JOIN [nt:version] AS v ON ISDESCENDANTNODE(n,v) 
WHERE contains(n.*,'Adobe') 
Смежные вопросы