Solr學習總結(六)solr的函數查詢Function Queries


摘要: 函數查詢允許你使用一個或多個數字字段的真實值生成一個相關性分數,函數查詢在standard,DisMax,eDisMax下都能使用。
查詢函數可以是常量,字段或者其他函數的組合。使用函數可以影響結果的排序。本文整理自Solr官方文檔:https://lucene.apache.org/solr/guide/6_6/function-queries.html

使用Function Query

1.直接向QParser指定函數參數,如func或frange:

q={!func}div{popularity,price}&fq={!frange l=1000}cus

tomer_ratings

2.在排序時使用:

sort=div(popularity,price)desc,score desc

3.在查詢結果中預處理一些輸出字段

&fl=sum(x,y),id,a,b,c,score

4.指定函數的一個參數:在dDisMax中指定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(rationg,5)
div(x,y) 除法,x除以y div(1,5)
dist 計算兩點之間的距離 dis(2,x,y,0,0)
docfreq(field,val) 返回某值在某字段出現的次數 docfreq(title,’solr’)
field(“field”) 返回該field的索引數量 field(‘title’)
hsin 曲面圓弧上兩點之間的距離 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) 就是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) 如果x在min和max之間,x=target,否則x=x map(x,0,0,1)
max(x,y,…) 返回最大值 max(2,3,0)
maxdoc 返回索引的個數,查看有多少文檔,包括被標記為刪除狀態的文檔 maxdoc()
min(x,y,…) 返回最小值 min(2,4,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)
rord 按ord的結果反序返回  
scale 返回一個在最大值和最小值之間的值 scale(x,1,3)
sqedist 平方歐氏距離計算 sqedist(x_td,y_td,0,0)
sqrt 返回指定值得平方根 sqrt(x)sqrt(100)
strdist 計算兩個字符串之間的距離 strdist(“SOLR”,id,edit)
sub 返回x-y sub(field1,field2)
sum(x,y) 返回指定值的和 sum(x,y,…)
sumtotaltermfreq 返回所有totaltermfreq的和  
termfreq 詞出現的次數 termfreq(title,’sorl’)
tf 詞頻 tf(text,’solr’)
top 功能類似於ord  
totaltermfreq 返回這個詞在該字段出現的次數 ttf(title,’memory’)
and 返回true值當且僅當它的所有操作為true and(not(exists(popularity)),exists(price))
or 返回true值當有一個操作為true or(value1,value2)
xor 返回false值如果所有操作都為真 xor(field1,field2)
not 排除操作 not(exists(title))
exists 如果字段存在返回真 exists(title)
gt,gte,lt,lte,eq 比較函數 2 gt 1


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM