使用组字段时是否使用spring data solr进行分页?

时间:2014-05-21 15:16:59

标签: spring solr pagination group-by spring-data-solr

我目前使用spring数据solr库并实现其存储库接口,我试图为我的一个使用带有SimpleQuery的Solr模板的自定义查询添加功能。它目前使用的分页似乎运行良好,但是,我想使用一个Group字段,因此兄弟产品只在第一次出现时计算一次。我在查询上设置了组字段并且它运行良好,但是,在构造页面属性时,它似乎仍然使用未分组数量的文档。

有一个已知的工作吗?

查询语法为此提供了以下参数,但似乎Spring Data Solr没有利用它。 &group.ngroups=true应返回结果中的组数,从而提供正确的页码。

任何其他信息将不胜感激。

1 个答案:

答案 0 :(得分:0)

实际上有两种方法可以添加此参数。

使用QueryParser s将查询转换为solr格式,因此可以注册修改后的格式。

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将是一个不那么具有侵入性的选择:

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