Solr的函数查询Function Queries

摘要: 函数查询允许你使用一个或多个数字字段的真实值生成一个相关性分数,函数查询在standardDisMaxeDisMax下都能使用。
查询函数可以是常量、字段或者其他函数的组合。使用函数可以影响结果的排序。本文整理自Solr官方文档

使用Function Query

  1. 直接向QParser指定函数参数,如funcfrange
    q={!func}div(popularity,price)&fq={!frange l=1000}customer_ratings
  2. 在排序时使用:
    sort=div(popularity,price) desc, score desc
  3. 在查询结果中预处理一些输出字段
    &fl=sum(x, y),id,a,b,c,score
  4. 指定函数的一个参数:在EDisMax中指定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(rating,5)
div(x,y)除法,x除以ydiv(1,5)
dist计算两点之间的距离dist(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)映射一个在最小值min与最大值max之间,又包含target的值map(x,0,0,1)
max(x,y,…)返回最大值max(2,3,0)
maxdoc返回索引的个数,查看有多少文档,包括被标记为删除状态的文档maxdoc()
min(x,y,…)返回最小值min(2,3,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)
rordord的结果反序返回rord(title)
scale返回一个在最大值和最小值之间的值scale(x,1,2)
sqedist平方欧氏距离计算sqedist(x_td, y_td, 0, 0)
sqrt返回指定值的平方根sqrt(x)sqrt(100)
strdist计算两个字符串之间的距离strdist(“SOLR”,id,edit)
sub返回x-ysub(myfield,myfield2)
sum(x,y)返回指定值的和sum(x,y,…)
sumtotaltermfreq返回所有totaltermfreq的和
termfreq词出现的次数termfreq(title,’solr’)
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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

cj96248

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值