2016-11-17 12 views
0

저장 한 버전에서 jackrabbit 저장소를 쿼리하고 싶습니다.발췌문 및 부모 식별자를 반환하는 JCR 쿼리

내 저장소는 다음과 같습니다 XPath 쿼리에 따라

JCR repo structure

잘 작동 : 템플릿 노드 '의 콘텐츠를 드를'//element(*, nt:frozenNode)[jcr:contains(., '" + keyword + "') ]/rep:excerpt(.) 및 행 개체 내가 발췌가 드에서 발견 얻을 수있는 반환에서 속성 (이것은 전체 텍스트 인덱서 가능하기 때문에 내 자신의 lucene 구성이 있습니다).

그러나 문제는 다음과 같습니다. 쿼리에서 발견 된 경로 만 반환하기 때문에 발췌 된 요소를 발견하는 방법 (/ jcr : system/jcr : versionStorage/95/c8/3e/95c83efc-8441-4017- b3af-ae7be49f07e5/1.0/jcr : frozenNode/de : template) 및 발췌 부분 자체.

그래서 Jackrabbit에 저장된대로 의 nt : versionHistory 노드를 알고 싶습니다. 그러나이는 나쁜 버전의 많은 너무 많은 시간을 소요하고

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

: 식별자를 versionHistory라는 도달하고 점점 :

나는 신약까지 부모 노드를 얻어서뿐만 아니라 이것에 대한 해결책을 가지고 있습니다 성능을 위해. 이 부모 노드가 쿼리가 실행 된 후에 인출 할 필요가 없습니다 있도록 쿼리에서이 버전 ID를 포함 할 수 있는지

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')