Solr学习总结(六)solr的函数查询Function Queries

摘要: 函数查询允许你使用一个或多个数字字段的真实值生成一个相关性分数,函数查询在standard,DisMax,eDisMax下都能使用。
查询函数可以是敞亮,字段或者其他函数的组合。使用函数可以影响结果的排序。本文整理自Solr官方文档:https://lucene.apache.org/solr/guide/6_6/function-queries.html

使用Function Query

1.直接向QParser指定函数参数,如func或frange:

q={!func}div{popularity,price}&fq={!frange l=1000}cus

tomer_ratings

2.在排序时使用:

sort=div(popularity,price)desc,score desc

3.在查询结果中预处理一些输出字段

&fl=sum(x,y),id,a,b,c,score

4.指定函数的一个参数:在dDisMax中指定boost参数,在DisMax中指定bf参数

q=dismax&bf=”ord(popularity)^0.5 recip(rord(price),1,1000,1000)^0.3”

5.在Lucene的QParser中使用_val_关键字指定函数:

q=_val_:mynumericfield _val_:”recip(rord(myfield),1,2,3)”

Solr中的可用函数

函数说明举例
abs(x)返回绝对值abs(-5)
“constant”指定一个浮点数1.5
def(“field”,value)默认值,当指定字段不存在时,返回默认值def(rationg,5)
div(x,y)除法,x除以ydiv(1,5)
dist计算两点之间的距离dis(2,x,y,0,0)
docfreq(field,val)返回某值在某字段出现的次数docfreq(title,’solr’)
field(“field”)返回该field的索引数量field(‘title’)
hsin曲面圆弧上两点之间的距离hsin(2,true,x,y,0,0)
idfInverse document frequency 倒排文档频率idf(“field”,’solr’)
ifif(test,value1,value2)if(termfreq(title,’solr’),popularity,42)
linear(x,m,c)就是m*x+c,等同于sum(product(m,x),c)linear(1,2,4)=1x2+4=6
log(x)以10为底,x的对数log(sum(x,100))
map(x,min,max,target)如果x在min和max之间,x=target,否则x=xmap(x,0,0,1)
max(x,y,…)返回最大值max(2,3,0)
maxdoc返回索引的个数,查看有多少文档,包括被标记为删除状态的文档maxdoc()
min(x,y,…)返回最小值min(2,4,0)
ms返回两个参数间毫秒级的差别ms(datefield1,2000-01-01T00:00:00Z)
norm(field)返回该字段索引值的范数norm(title)
numdocs返回索引的个数,查看有多少文档,不包括被标记为删除状态的文档numdocs()
ord根据顺序索引发货结果ord(title)
pow(x,y)返回x的y次方pow(x,log(y))
product(x,y)返回多个值得乘积product(x,2)
query返回给定的子查询的得分,或者文档不匹配的默认值值query(subquery,default)
recip(x,m,a,b)相当于a/(m*x+b),a,m,b是常量,x是变量recip(myfield,m,a,b)
rord按ord的结果反序返回
scale返回一个在最大值和最小值之间的值scale(x,1,3)
sqedist平方欧氏距离计算sqedist(x_td,y_td,0,0)
sqrt返回指定值得平方根sqrt(x)sqrt(100)
strdist计算两个字符串之间的距离strdist(“SOLR”,id,edit)
sub返回x-ysub(field1,field2)
sum(x,y)返回指定值的和sum(x,y,…)
sumtotaltermfreq返回所有totaltermfreq的和
termfreq词出现的次数termfreq(title,’sorl’)
tf词频tf(text,’solr’)
top功能类似于ord
totaltermfreq返回这个词在该字段出现的次数ttf(title,’memory’)
and返回true值当且仅当它的所有操作为trueand(not(exists(popularity)),exists(price))
or返回true值当有一个操作为trueor(value1,value2)
xor返回false值如果所有操作都为真xor(field1,field2)
not排除操作not(exists(title))
exists如果字段存在返回真exists(title)
gt,gte,lt,lte,eq比较函数2 gt 1
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值