2014-05-21 3 views
0

저는 현재 spring data solr 라이브러리를 사용하고 저장소 인터페이스를 구현합니다. SimpleQuery와 함께 Solr 템플릿을 사용하는 사용자 정의 쿼리 중 하나에 기능을 추가하려고합니다. 현재 잘 작동하는 것으로 보이는 페이징을 사용하지만 그룹 필드를 사용하여 형제 제품이 처음으로 한 번만 계산됩니다. 그룹 필드를 쿼리에 설정하고 잘 작동하지만 페이지 특성을 구성 할 때 그룹화되지 않은 숫자의 문서를 사용하는 것으로 보입니다.그룹 필드를 사용할 때 스프링 데이터 solr을 사용하여 페이징을 끊었습니까?

알려진 문제가 있습니까?

쿼리 구문은이 목적을 위해 다음 매개 변수를 제공하지만 Spring Data Solr이이를 사용하지 않는 것으로 보입니다. &group.ngroups=true은 결과의 그룹 수를 반환해야 올바른 페이지 번호를 부여해야합니다.

기타 정보를 제공해 주시면 감사하겠습니다.

답변

0

실제로 두 가지 방법으로이 매개 변수를 추가 할 수 있습니다.

쿼리는 QueryParser을 사용하여 solr 형식으로 변환되므로 수정 된 것을 등록 할 수 있습니다.

final Query query = //...whatever query you have. 

List<DomainType> result = solrTemplate.execute(new SolrCallback<List<DomainType>>() { 

    @Override 
    public List<DomainType> doInSolr(SolrServer solrServer) throws SolrServerException, IOException { 

     SolrQuery solrQuery = new QueryParsers().getForClass(query.getClass()).constructSolrQuery(query); 

     //add missing params 
     solrQuery.set(GroupParams.GROUP_TOTAL_COUNT, true); 

     return solrTemplate.convertQueryResponseToBeans(solrServer.query(solrQuery), DomainType.class); 
    } 
}); 

open an issue 주시기 바랍니다 :

QueryParser modifiedParser = new DefaultQueryParser() { 

    @Override 
    protected void appendGroupByFields(SolrQuery solrQuery, List<Field> fields) { 

     super.appendGroupByFields(solrQuery, fields); 
     solrQuery.set(GroupParams.GROUP_TOTAL_COUNT, true); 
    } 
}; 

solrTemplate.registerQueryParser(Query.class, modifiedParser); 

SolrCallback 덜 방해 옵션이 될 것입니다 사용.

+0

Iv가 더 가깝게 보였고 DefaultQueryParser에서 그룹 쿼리 결과를 평탄하게 만들고 응답에서 정상 결과로 반환하는 다음 줄'solrQuery.setParam (GroupParams.GROUP_MAIN, true); ' 그룹 카운트 값이 그룹의 속성으로 반환된다는 점을 제외하고는 매우 좋습니다. 그래서 당신이 설명했던 예제에서는 전혀 반환되지 않을 것입니다. GroupParams.GROUP_MAIN없이 그룹 쿼리를 처리하도록 SolrTemplate을 수정했으나 정확한 해결책은 아닌지 확실하지 않습니다. 도서관 테스트 나 내 자신의 테스트를 망가지지 않습니다. – user779420