手机端小强原创文章,java小强个人博客站点
当前位置: 首页 >> 开源 >> Solr常用函数和实际使用

Solr常用函数和实际使用

18770 开源 | 2016-6-22

ord

对于一个域,它所有的值都将会按照字典顺序排列,这个函数返回你要查询的那个特定的值在这个顺序中的排名。这个域,必须是非multiValued的,当没有值存在的时候,将返回0.

例如:某个特定的域只能去三个值,“apple”、“banana”、“pear”,那么ord(“apple”)=1,ord(“banana”)=2,ord(“pear”)=3.

需要注意的是,ord()这个函数,依赖于值在索引中的位置,所以当有文档被删除、或者添加的时候,ord()的值就会发生变化。当你使用MultiSearcher的时候,这个值也就是不定的了。


rord

这个函数将会返回与ord相对应的倒排序的排名。

格式: 

rord(myIndexedField)


sum

这个函数的意思就显而易见,它就是表示“和”。

格式:

sum(x,1)

sum(sqrt(x),log(y),z,0.5)


product

product(x,y,...)将会返回多个函数的乘积。

格式:

product(x,2)


div

div(x,y)表示x除以y的值

div(sum(x,100),max(y,1))


pow

pow表示幂值。pow(x,y) =x^y。

例如:

pow(x,0.5) 表示开方

pow(x,log(y))


abs

abs(x)将返回表达式的绝对值

格式:

abs(x)


log

log(x)将会返回基数为10,x的对数

格式:

log(x)

log(sum(x,100))


sqrt

sqrt(x) 返回 一个数的平方根

格式:

sqrt(2)

sqrt(sum(x,100))


map

如果 x>=min,且x<=max,那么map(x,min,max,target)=target

如果 x不在[min,max]这个区间内,那么map(x,min,max,target)=x

格式:

map(x,0,0,1)


scale

scale(x,minTarget,maxTarget) 这个函数将会把x的值限制在[minTarget,maxTarget]范围内


linear

linear(x,m,c)表示 m*x+c ,其中m和c都是常量,x是一个变量也可以是一个函数。

例如:

linear(x,2,4)=2*x+4.


recip

recip(x,m,a,b)=a/(m*x+b)其中,m、a、b是常量,x是变量或者一个函数。

当a=b,并且x>=0的时候,这个函数的最大值是1,值的大小随着x的增大而减小。

例如:

recip(rord(creationDate),1,1000,1000)


max

max(x,c)将会返回一个函数和一个常量之间的最大值。

例如:

max(myfield,0)


Solr常用函数和实际使用


附(solr函数使用之map):

map 函数是将将一个字段指定范围内的值进行映射转换为目标值

常见的用法有:

map(x,min,max,target)和map(x,min,max,target,other)两种

例如:

map(x,0,0,1) 在函数参数中的x如果为0时则将其值映射为1,这在处理默认值为0时很有用。

map(x,10,100,1,2) 在函数参数中的x如果落在[10,100]之间,则将x的值映射为1,否则将其值映射为2

使用方法:

一般用作排序

sort=sum(value,map(age,10,10,$x,$y))+asc&x=2&y=3

上面是将age字段值为10,则将其值映射为2,否则为3,然后加上value,然后按照升序排列

sort=sum(value,map(age,10,10,$x,$y))+asc&x=sum(2,some_field*2)&y=3

与上一个例子的意图差不多,只是x值的生成是通过函数实现


附(函数应用solr增强排序):

根据商品是否有货,手动调整的排序数字进行排序

bf=
sum(
product(map(stock,1,99999999,1,0),100),
product(recip(rord(search_key),1,1,100),500)
)

实用map函数对stock进行取值,如果是1到99999999就是1,无货就是0,然后乘以100(这个乘以100是因为我的代码中有其他打分逻辑,以100分为满分进行划分)。

rord对search_key进行进行排序,然后用recip将数值压缩到1到100里面,然后是乘以500(为什么乘以500,因为一定要以手动调整为主,这个值可以尽量设大一些)。

最后将数值sum出来,就是他的分数,进行bf增强排序。

推荐您阅读更多有关于“ 函数 map Solr ord rord product recip ”的文章

上一篇:MySQL的create table as 与 like区别 下一篇:mysql参数max_allowed_packet

猜你喜欢

发表评论:

个人资料
blogger

java小强
没有思考,人生的路会越走越难!

搜索
分类
最新微语
  • 今天同学问我,最近还在写代码吗?我想了想,这个问题怎么回答呢,我好像确实很长时间,虽然写了一些,但是主要内容已经不是写代码了。然后再想想,自己也7年多了,这么多年了,我收获了什么,我的目标到底是什么。眼看就奔三了,人生啊,开启感叹模式。

    2017-03-30 22:52

  • 也许大家都已经注意到了,今年的房价,好多地方都是翻了一番,跟着就是,各地房东开始变相涨租。今年之所以搬走,就是为此,这两天同学也是如此。很多房东只认钱,别谈感情,伤钱。而对于这个城市来说,你怎么定位自己,你真把自己当成她的一份子?你来此为何?将来何去何从?自己掂量清楚。

    2016-12-05 10:03

  • 为什么一直不写了呢?因为当爸爸了,没空了。今年的冬天,有些寒冷,除了这寒冬带来的不适,更有因乐视公司遇到危机,而带来的同事别离。送别同事,看着空旷的工位,心中有些悲凉。临近年关,此时此刻,该怎么做,似乎不再是脑子一热那么简单了。

    2016-11-24 11:28

  • 已经请假,加上国庆,要很长一段时间不在北京了。919加班,搞的现在有点心累,胸闷,身体不适。看来,我要好好休息一下了。这几天有些冷,2016的冬天,一步步来了,各位亲友,记得添衣加粗啊。

    2016-09-23 17:29

  • 现在是真的有秋天的感觉了,晚上也不热了,白天也凉快了。再来点风,那酸爽,就有一种想出去防风的冲动了。不过因为最近广州的事情压着,我也没办法,搞的特别累,以前是天天加班不想有自由,现在是因为有事情了,被限制了自由。加上公司的一些事情,感觉日子特别的无聊。

    2016-08-31 17:39

  • 更多»

最新文章
热门文章
随机文章