Group

分组查询

group 是对查询结果按一个字段分组,并返回各组的前排文档。

示例

在一家电子产品在线商店搜索“DVD”,你可能会获得3个类别:“TV and Video”, “Movies”, “Computers”, 每类3个结果。 在这个案例里,查询关键字“DVD”在3个类别里都有出现,所以 solr 将他们分组,提升用户体验

group 参数

group.field 必须满足如下条件(存疑)

  • 单值(single-valued)

  • 索引(indexed)或 value source 且在一个 function query 里,例如 ExternalFileField

  • string 类型,如 StrField 或 TextField

参数

类型

说明

group

boolean

是否开启 group 查询

group.field

string

分组字段

group.func

query

分组基于一个 function query 的唯一值

group.query

query

该查询返回一组匹配的文档

rows

int

返回几个组,默认=10

start

int

对于组的列表,指定一个初始的偏移

group.limit

int

每组返回多少结果,默认=1

group.offset

int

针对每组里的文档集合,指定一个初始的偏移量

sort

sortspec

solr 如何对组排序,默认=score desc。

group.sort

sortspec

solr 如何对每个组的文档排序

group.format

取值=[grouped,simple]

simple 表示返回一个简单列表,且 start,rows参数对文档起作用而非组

group.main

boolean

true 表示首个字段的分组结果为主要结果,返回格式为 simple

group.ngroups

boolean

默认=false,true 表示返回结果带上组数

group.truncate

boolean

默认=false,true 表示 facet count 基于每组里最相关的文档

group.facet

boolean

是否计算分组 facet

group.cache.percent

int,取值[0-100]

默认=0,大于 0 表示开启结果缓存。注意:开启缓存仅对 boolean,通配符,模糊查询有改善,对其他查询会降低性能

group query

不指定分组字段,而是指定了分组条件,例如将查询结果按如下条件分组

  • price<100

  • price<=500 and price>=100

  • price>500

那么查询可以这么写

group=true&
group.query=price:[0 TO 99.99]&
group.query=price:[100 TO 500]&
group.query=price:[500.01 TO *]

分布式分组查询

group 支持分布式查询,但要注意

  • group.func 不支持分布式

  • group.ngroups 和 group.facet 需要每个组的所有文档都在同一个分片

Last updated