搜搜引擎排序问题,由于涉及到的维度比较多,有时候单纯的依靠sort是没法知足须要的,例如:搜索商品的时候我但愿无论怎么排无货的商品都置底,这样问题就来了,怎么排?
由于工做的须要,须要对搜索作排序,这里我记录下个人处理方法,搜索的商品要把无货的置底,可是还要能按别的字段排序,例如价格,无论价格升序仍是降序,无货的商品都要置底,个人处理方法是:
价格升序时:
sum(product(recip(sum(price,100),1,1,0),100000),
map(map(stock,0,0,-100000),1,maxStockValue,1)),由于lucene使用的倒排序索引,因此这里若是想实现价格升序,就是取倒数,
recip(sum(price,100),1,1,0),
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)
这里没有直接用price取倒数,是由于有时候为了活动的须要商品的价格会调成¥0,因此,此时就会有问题;因此这里对全部价格加100取倒数,