搜搜引擎排序問題,由於涉及到的維度比較多,有時候單純的依靠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取倒數,