sunspot+solr搜索的自定義排序

近來由于系統(tǒng)需要個(gè)性化的排序搜索結(jié)果,所以研究了一下solr的排序,發(fā)現(xiàn)solr支持在排序中使用函數(shù)對字段進(jìn)行處理,以前由于沒有關(guān)注導(dǎo)致錯(cuò)過了這么好的功能,其實(shí)solr早起就支持一些函數(shù)的功能,后來增加了越來越多的函數(shù),詳情參見這里

sunspot中支持排序中使用函數(shù)是到2013年底才開始支持的,當(dāng)然在這之前可以使用自定義參數(shù)的形式來查詢,不過有這個(gè)sunspot的支持就更方便了

說了半天其實(shí)就是使用sunspot的order_by_function函數(shù)來排序
這個(gè)函數(shù)的第一個(gè)參數(shù)是函數(shù)名稱,最后一個(gè)參數(shù)是排序方式,中間是solr函數(shù)使用的參數(shù),order_by_funtion還支持函數(shù)的嵌套

#上代碼,以下排序是將時(shí)間在 2014-4-1~2014-4-30中間的數(shù)據(jù)排到前面
#其他時(shí)間的排到這個(gè)時(shí)間段的后面,即便時(shí)間是 2015年也和2012年一樣排到后面
Post.search do 
  order_by_function(:map,:price_date,'2014-4-1'.to_time.to_i*1000,'2014-4-30'.to_time.to_i*1000,1,0,:desc)
end

Solr中的可用函數(shù)
函數(shù) 說明 舉例
abs(x) 返回絕對值 abs(-5)
“constant” 指定一個(gè)浮點(diǎn)數(shù) 1.5
def(“field”,value) 默認(rèn)值藐唠,當(dāng)指定字段不存在時(shí),返回默認(rèn)值 def(rationg,5)
div(x,y) 除法鹉究,x除以y div(1,5)
dist 計(jì)算兩點(diǎn)之間的距離 dis(2,x,y,0,0)
docfreq(field,val) 返回某值在某字段出現(xiàn)的次數(shù) docfreq(title,’solr’)
field(“field”) 返回該field的索引數(shù)量 field(‘title’)
hsin 曲面圓弧上兩點(diǎn)之間的距離 hsin(2,true,x,y,0,0)
idf Inverse document frequency 倒排文檔頻率 idf(“field”,’solr’)
if if(test,value1,value2) if(termfreq(title,’solr’),popularity,42)
linear(x,m,c) 就是mx+c,等同于sum(product(m,x),c) linear(1,2,4)=1x2+4=6
log(x) 以10為底宇立,x的對數(shù) log(sum(x,100))
map(x,min,max,target) 如果x在min和max之間,x=target,否則x=x map(x,0,0,1)
max(x,y,…) 返回最大值 max(2,3,0)
maxdoc 返回索引的個(gè)數(shù),查看有多少文檔自赔,包括被標(biāo)記為刪除狀態(tài)的文檔 maxdoc()
min(x,y,…) 返回最小值 min(2,4,0)
ms 返回兩個(gè)參數(shù)間毫秒級(jí)的差別 ms(datefield1,2000-01-01T00:00:00Z)
norm(field) 返回該字段索引值的范數(shù) norm(title)
numdocs 返回索引的個(gè)數(shù)妈嘹,查看有多少文檔,不包括被標(biāo)記為刪除狀態(tài)的文檔 numdocs()
ord 根據(jù)順序索引發(fā)貨結(jié)果 ord(title)
pow(x,y) 返回x的y次方 pow(x,log(y))
product(x,y) 返回多個(gè)值得乘積 product(x,2)
query 返回給定的子查詢的得分绍妨,或者文檔不匹配的默認(rèn)值值 query(subquery,default)
recip(x,m,a,b) 相當(dāng)于a/(m
x+b),a,m,b是常量润脸,x是變量 recip(myfield,m,a,b)
rord 按ord的結(jié)果反序返回
scale 返回一個(gè)在最大值和最小值之間的值 scale(x,1,3)
sqedist 平方歐氏距離計(jì)算 sqedist(x_td,y_td,0,0)
sqrt 返回指定值得平方根 sqrt(x)sqrt(100)
strdist 計(jì)算兩個(gè)字符串之間的距離 strdist(“SOLR”,id,edit)
sub 返回x-y sub(field1,field2)
sum(x,y) 返回指定值的和 sum(x,y,…)
sumtotaltermfreq 返回所有totaltermfreq的和
termfreq 詞出現(xiàn)的次數(shù) termfreq(title,’sorl’)
tf 詞頻 tf(text,’solr’)
top 功能類似于ord
totaltermfreq 返回這個(gè)詞在該字段出現(xiàn)的次數(shù) ttf(title,’memory’)
and 返回true值當(dāng)且僅當(dāng)它的所有操作為true and(not(exists(popularity)),exists(price))
or 返回true值當(dāng)有一個(gè)操作為true or(value1,value2)
xor 返回false值如果所有操作都為真 xor(field1,field2)
not 排除操作 not(exists(title))
exists 如果字段存在返回真 exists(title)
gt,gte,lt,lte,eq 比較函數(shù) 2 gt 1

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市他去,隨后出現(xiàn)的幾起案子毙驯,更是在濱河造成了極大的恐慌,老刑警劉巖灾测,帶你破解...
    沈念sama閱讀 222,000評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件爆价,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)允坚,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,745評論 3 399
  • 文/潘曉璐 我一進(jìn)店門魂那,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人稠项,你說我怎么就攤上這事涯雅。” “怎么了展运?”我有些...
    開封第一講書人閱讀 168,561評論 0 360
  • 文/不壞的土叔 我叫張陵活逆,是天一觀的道長。 經(jīng)常有香客問我拗胜,道長蔗候,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,782評論 1 298
  • 正文 為了忘掉前任埂软,我火速辦了婚禮锈遥,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘勘畔。我一直安慰自己所灸,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,798評論 6 397
  • 文/花漫 我一把揭開白布炫七。 她就那樣靜靜地躺著爬立,像睡著了一般。 火紅的嫁衣襯著肌膚如雪万哪。 梳的紋絲不亂的頭發(fā)上侠驯,一...
    開封第一講書人閱讀 52,394評論 1 310
  • 那天,我揣著相機(jī)與錄音奕巍,去河邊找鬼吟策。 笑死,一個(gè)胖子當(dāng)著我的面吹牛的止,可吹牛的內(nèi)容都是我干的踊挠。 我是一名探鬼主播,決...
    沈念sama閱讀 40,952評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼冲杀,長吁一口氣:“原來是場噩夢啊……” “哼效床!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起权谁,我...
    開封第一講書人閱讀 39,852評論 0 276
  • 序言:老撾萬榮一對情侶失蹤剩檀,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后旺芽,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體沪猴,經(jīng)...
    沈念sama閱讀 46,409評論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡辐啄,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,483評論 3 341
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了运嗜。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片壶辜。...
    茶點(diǎn)故事閱讀 40,615評論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖担租,靈堂內(nèi)的尸體忽然破棺而出砸民,到底是詐尸還是另有隱情,我是刑警寧澤奋救,帶...
    沈念sama閱讀 36,303評論 5 350
  • 正文 年R本政府宣布岭参,位于F島的核電站,受9級(jí)特大地震影響尝艘,放射性物質(zhì)發(fā)生泄漏演侯。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,979評論 3 334
  • 文/蒙蒙 一背亥、第九天 我趴在偏房一處隱蔽的房頂上張望秒际。 院中可真熱鬧,春花似錦狡汉、人聲如沸娄徊。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,470評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽嵌莉。三九已至进萄,卻和暖如春捻脖,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背中鼠。 一陣腳步聲響...
    開封第一講書人閱讀 33,571評論 1 272
  • 我被黑心中介騙來泰國打工可婶, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人援雇。 一個(gè)月前我還...
    沈念sama閱讀 49,041評論 3 377
  • 正文 我出身青樓矛渴,卻偏偏與公主長得像,于是被迫代替她去往敵國和親惫搏。 傳聞我的和親對象是個(gè)殘疾皇子具温,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,630評論 2 359

推薦閱讀更多精彩內(nèi)容