solr5.2.1查询参数说明

时间:2022-05-06 16:45:06

q=xx:yy
q为查询条件,xx为字段名称,yy为关键字,支持and or 查询,如q=name:张三 or age:21

fq=xx:yy
fq为过滤条件,即在查询结果中再次过滤,xx为过滤字段,yy为过滤条件的值

sort=xx desc,yy asc
sort为排序,按照xx字段的降序yy字段的升序排列

start=0&rows=5
分页,开始行号,每页条数

fl=xx,yy
只返回xx,yy两列数据

wt=json
以json格式返回

df=xx
默认查询条件字段,即这里如果设置为XX,那么q=yy,效果等于 q=xx:yy

indent=true
即表示需要对返回的数据进行格式化缩进

hl=true
是否开启高亮

hl.fl=xx,yy
高亮哪些字段,即当匹配到数据时,如果这些数据在XX YY字段的时候,会返回高亮

hl.simple.pre=
用什么表情将查询条件包裹起来,前置表情
hl.simple.post=

用什么表情将查询条件包裹起来,后置表情

facet=true
是否开启面查询,面查询即为按照某个字段(维度)进行分组统计的意思

facet.field=xx
即按照xx字段进行统计(面查询),例:根据性别统计,返回结果会包含男多少人,女多少人。如果有多个域,则在url中构造多个即可,如:facet.field=xx&facet.field=yy&facet.field=zz

facet.prefix=xxx
符合指定前缀字符串的维度才会显示,如(假设sex为man或woman):facet.field=sex&facet.prefix=ma,则结果中只会显示man的统计数量。
注意:这里如果field有多个字段,则这多个字段的类型必须为字符串。
支持多个维度,比如facet.field=xx&facet.field=yy中,要过滤xx以zzz开头,yy以www开头,则需要如下构造请求参数:

facet.field=xx&facet.field=yy&f.xx.facet.prefix=zzz&f.yy.facet.prefix=www

facet.query=xx:yy
和fq类似,例:facet.query=age:[20 TO 30],统计返回结果中年龄在20-30岁的人数,如果有多个条件,则在url中构造多个即可,如:facet.query=age:[20 TO 30]&facet.query=age:[30 TO 40]&facet.query=age:[40 TO 50],表示年龄在20-30的人数,30-40的人数,40-50的人数
注意:facet.query=age:[20 TO 30]表示返回结果中20-30岁的人数,而不管这些人中性别是男是女

facet.sort=count|index
默认值是count即按照每个维度的统计数字降序进行排序的,另一个可选值是index,表示按照维度名称的ASCII值进行升序排序。如果对多个维度进行不同的升序降序排列,可以如下方式访问:

facet=true&facet.field=age&facet.field=sex&f.age.facet.sort=count&f.sex.facet.sort=index 表示根据年龄降序,根据性别升序

facet.limit=数字
表示每个维度最多返回几组,默认是全部返回,如果有多个维度而你只想对某一个维度进行限制,那你可以这样:

facet=true&facet.field=age&facet.field=sex&f.sex.facet.limit=1

facet.offset=数字
表示从那一组开始显示,默认是从0开始,类似于分页中的offset,这个参数也支持全局设置和单个维度设置,和facet.limit类似

facet.mincount=数字
表示每组统计的数字的最小值,默认最小值为0,这个参数也支持对单个维度进行设置,和facet.limit类似

facet.missing=true|false
表示如果匹配的document当中有域值为null的时候,该document是否应该统计在内,默认facet.missing=false即不统计在内,如果为true则不管域值是否有为null的,都将统计出来。支持多个维度和facet.limit类似

facet.threads=数字
表示最多开启多少个线程并行去延迟加载域的值,默认为0,即表示不额外开辟线程,设置为负数即表示线程数不受限制,支持多个维度,和facet.limit类似,但没法验证

facet.date=xx
表示对某个域进行日期范围的facet查询,参数值一般为dateField的域名称,如果你使用了facet.date参数,那么facet.date.start、facet.date.end、facet.date.gap需要强制性的同时搭配使用(2009-01-01T00:00:00Z),facet.date.start表示日期范围的起始日期,end即表示结束日期,gap即表示递增的公差,比如+1DAY,+1MONTH,+1YEAR

facet.date.hardend
可选值为true/false,表示含义还是举例说明吧,比如你facet.date.start=2015-01-01, 而facet.date.end=2015-09-20 ,假如你facet.date.gap=+1MONTH即表示按一个月把start与end之间的时间根据gap值分成9份,如果hardend为true,那最后一份的时间范围是2015-09-01至2015-09-20;如果hardend为false,那最后一份的时间范围就是2015-09-01至2015-10-01,即直接无视end参数的限制,严格按照gap的间隔来算。默认为false。

facet.date.other
可选的参数值为before,after,between,none,all

before: 表示需要对start之前的日期做个统计,
after: 表示需要对end之后的日期做个统计
between: 表示需要对start与end之间的日期做个统计
none: 表示不做任何汇总统计
all: 表示before,after,between都需要做统计

facet.range=xx
即Facet的数字范围查询,日期范围请使用facet.date,不过它的使用方法跟facet.date日期范围查询相似,同理也有facet.range.start,facet.range.end,facet.range.gap,facet.range.hardend,facet.range.other你懂的,就不多说了,区别就是facet range一般用于数字范围检索,此配置项同样支持全局配置以及单个facet域配置。

例:facet=true&facet.range=age&facet.range.start=0&facet.range.end=100&facet.range.gap=10

facet.pivot=xx,yy
多个维度的叠加,比如我想统计每种品牌下各种颜色的手机数量

key
通过key操作符可以为face查询返回的json串中的属性名起一个别名,示例如下:
facet.field={!key=”姓名”}brand 为brand起一个别名叫姓名,类似于sql中的 select name as 姓名 ……

tag&ex操作符
当你使用filter query时,如果你filter Quer作用的域刚好又是facet域时,统计的结果会被限定在filter Query范围之内。
如:&facet.field=name&fq=name:abc, 则统计的时候,只有abc才能统计出数量,其他的都为0,如果想其他的也能统计出数据,则需要使用tag和ex标签。

&facet.field={!ex=xx}name&fq={!tag=xx}name:abc
这样除了能统计处abc的数据,其他字段也能统计出数据