2017-01-17 3 views
1

문서 목록이있는 페이지를 만들고 목록에 필터링을 추가하려고합니다. 문서 구조는 다음과 같습니다복합 필드 속성에 의한 문서 쿼리 실패

/content/documents/web/sale-exclusives/ 
    <node name> [web:saleexclusive] 
     web:exclusive [web:exclusive] (@web:year) 

그래서, 속성 web:year와 유형 web:exclusive의 화합물 아이들이 유형 web:saleexclusive의 루트 문서가 있습니다. web:saleexclusive 유형의 문서를 web:year 하위 필터링 노드로 필터링하려고합니다.

내가 EssentialsListComponent 확장이 achive과 (단지 시험)과 같은 contributeAndFilters 방법을 재정의하려면 :

@Override 
protected void contributeAndFilters(List<BaseFilter> filters, HstRequest request, HstQuery query) { 
    Filter filter = query.createFilter(); 
    try { 
     filter.addGreaterOrEqualThan("web:exclusive/web:year", 1900L); 
     filters.add(filter); 
    } catch (FilterException e) { 
     LOGGER.error("", e); 
    } 
} 

웹에 문서가 있지만, 문제는, 내가 빈 결과를 얻고 있다는 것입니다 : 연도> 필터가 없으면 모든 문서가 sale-exclusives 아래에 있습니다.

필터는 위의 XPath 쿼리 다음과 같은 생산 :

//*[(@hippo:paths='79a713cf-294d-4e99-9d63-fc50db10e43f') and (@hippo:availability='live') and not(@jcr:primaryType='nt:frozenNode') and (web:exclusive/web:year >= 1900)] order by @jcr:score descending 

필터링을 web:saleexclusive 잘 작동의 자신의 속성에 의해.

내가 그 문제를 해결할 수 있습니까?

+0

인가? – Jeroen

+0

유형이 Long입니다. –

답변

0

@Jeroen 도움말을 통해 해결책을 찾았습니다.

같은 문제는 here을 descussed된다

1)에 따르면 도메인 구성은 'liveuser는'형 여론 조사의 노드에는 읽기 권한이 없습니다 : 설문 조사를. 도메인이 권한 쿼리를 만드는 데 사용되므로이 인증 쿼리에는 poll : poll 유형의 노드가 없으므로 검색 결과에 표시되지 않습니다.

2) AccessManager는 문서 아래 노드를 조금 처리합니다 다른 : 사용자가 읽을 수있는 문서 아래에 노드가있는 경우 도메인 규칙에이 노드가 구성되어 있지 않은 경우에도 AccessManager에 따라 해당 문서의 하위 노드를 읽을 수 있습니다.

위의 두 규칙은 모순됩니다. 사용자가 hippo : compound 및 hippostd : html 유형의 노드를 읽을 수있는 라이브 사용자 용 도메인을 추가하여 직접 수정할 수 있습니다.

해결책은 마지막 단락에 있습니다. 보안 도메인을 추가하고 liveuser에 읽기 권한을 부여한 후 문제가 해결되었습니다.Date 형 또는 긴의 연도 속성은

Useful documentation about security domains

1

addGreaterOrEqualThan 연산자는 이름 기반 요소에서 작동합니다. 귀하의 경우 XPATH에서 항상 @ 기호를 접두사로하는 노드의 속성을 선택하려고합니다.

다음 식을 사용해보십시오 :

try { 
     filter.addGreaterOrEqualThan("web:exclusive/@web:year", 1900L); 
     filters.add(filter); 
    } catch (FilterException e) { 
     LOGGER.error("", e); 
    } 

당신은 항상 저장소 서블릿 인터페이스 (http://localhost:8080/cms/repository/)에서 XPath 쿼리를 실험 할 수 있습니다.

+0

'@'로 시도했지만 결과는 같습니다. 감사합니다. url에 대한 질문에 붙여 넣은 쿼리는 리포지토리 서블릿 인터페이스에서 '@'의 유무에 관계없이 올바르게 작동합니다. 내 다음 가정은 Lucene 지수에 문제가 있다는 것입니다. BTW, 저장소 서블릿 인터페이스의 기본 URL은 http : // : /cms/repository –

+0

입니다. HST를 통해 결과를 얻지 못하면 잘못된 인증 수준으로 인해 발생할 수 있습니다. 저장소 인터페이스에서는 보통 HST에 미리보기 또는 라이브 '사용자'가있는 admin 사용자 (모든 노드의 모든 권한)와 로그인하여 미리보기 또는 라이브 상태의 문서에 액세스 할 수 있습니다. – Jeroen

+0

인증 수준 문제의 경우 필터를 추가하지 않고 결과를 얻지 못했지만 필터를 사용하지 않으면 모든 문서가 반환됩니다. –