一、在solr admin管理界面进行分组查询
地址:http://localhost:8983/solr/test/select?q=*%3A*&wt=xml&indent=true&group=true&group.field=id
二、PHP程序分组查询
// order处理
if($order) $params['sort'] = $order;
// group处理
if($group){
$params['group'] = 'true'; //是否分组 true=是
$params['group.field'] = $group;//分组字段
$params['group.ngroups'] = 'true';//是否返回分组数量 true=是
if($group_sort) $params['group.sort'] = $group_sort;
// group limit 处理
if( strpos( $group_limit , ',' ) === FALSE ){
$params['group.offset'] = 0;
$params['group.limit'] = $group_limit;
}else{
$tmp_limit = explode( ',' , $group_limit );
$params['group.offset'] = trim( $tmp_limit[0] );
$params['group.limit'] = trim( $tmp_limit[1] );
}
}
// 执行查询
$response = $this -> search($where,$limit_start,$limit_end,$params);
三、GROPU参数
参数 | 类型 | 说明 |
---|---|---|
group | 布尔值 | 设为true,表示结果需要分组 |
group.field | 字符串 | 需要分组的字段,字段类型需要时是StrField或TextField |
group.func | 查询语句 | 可以指定查询函数 |
group.query | 查询语句 | 可以指定查询语句 |
rows | 整数 | 返回多少组结果,默认10 |
start | 整数 | 指定结果开始位置/偏移量 |
group.limit | 整数 | 每组返回多数条结果,默认1 |
group.offset | 整数 | 指定每组结果开始位置/偏移量 |
sort | 排序算法 | 控制各个组的返回顺序 |
group.sort | 排序算法 | 控制每一分组内部的顺序 |
group.format | grouped/simple | 设置为simple可以使得结果以单一列表形式返回 |
group.main | 布尔值 | 设为true时,结果将主要由第一个字段的分组命令决定 |
group.ngroups | 布尔值 | 设为true时,Solr将返回分组数量,默认fasle |
group.truncate | 布尔值 | 设为true时,facet数量将基于group分组中匹相关性高的文档,默认fasle |
group.cache.percent | 整数0-100 | 设为大于0时,表示缓存结果,默认为0。该项对于布尔查询,通配符查询,模糊查询有改善,却会减慢普通词查询。 |