0

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

有没有已知的解决方法?

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

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

4

1 回答 1

0

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

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

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

使用 aSolrCallback将是一个不那么侵入性的选项:

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);
    }
});

请随时打开一个问题

于 2014-05-22T05:39:54.083 回答