久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

Solr的函數查詢怎么使用

173次閱讀
沒有評論

共計 2313 個字符,預計需要花費 6 分鐘才能閱讀完成。

本篇內容介紹了“Solr 的函數查詢怎么使用”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓丸趣 TV 小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!

作用

通過函數查詢讓我們可以利用 numeric 域的值或者與域相關的的某個特定的值的函數,來對文檔進行評分。

如何使用

  這里主要有兩種方法可以使用函數查詢,這兩種方法都是通過 solr http 接口的:

  1、內嵌在正常的 solr 查詢表達式中。即,將函數查詢寫在 q 這個參數中,這時候,我們使用_val_將函數與其他的查詢加以區別。至于具體怎樣使用,請讀者留意下面的例子。

  2、使用明確為函數查詢的參數,比如說 dismax 中的 bf(boost function)這個參數。  注意:bf 這個參數是可以接受多個函數查詢的,它們之間用空格隔開,它們還可以帶上權重。所以,當我們使用 bf 這個參數的時候,我們必須保證單個函數中是沒有空格出現的,不然程序有可能會以為是兩個函數。

例如:q=dismax bf=ord(popularity)^0.5 recip(rord(price),1,1000,1000)^0.3

函數格式

目前,function query 并不支持 a+b 這樣的形式,我們得把它寫成一個方法形式,這就是 sum(a,b)

函數詳解

1、constant:支持有小數點的常量,

例如,1.5,查詢表達式就是:_val_:1.5

2、fieldvalue,這個函數將會返回 numeric field 的值,這個域必須是 indexd 的,非 multiValued 的。格式很簡單,就是該域的名字。如果這個域中沒有這樣的值,那么將會返回 0。

3、ord,對于一個域,它所有的值都將會按照字典順序排列,這個函數返回你要查詢的那個特定的值在這個順序中的排名。這個域,必須是非 multiValued 的,當沒有值存在的時候,將返回 0。

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

需要注意的是,ord()這個函數,依賴于值在索引中的位置,所以當有文檔被刪除、或者添加的時候,ord()的值就會發生變化。當你使用 MultiSearcher 的時候,這個值也就是不定的了。

4、rord,這個函數將會返回與 ord 相對應的倒排序的排名。

格式: rord(myIndexedField).

5、sum,這個函數的意思就顯而易見啦,它就是表示“和”。

格式:sum(x,1)

  sum(x,y)

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

6、product,product(x,y,…)將會返回多個函數的乘積。

格式:product(x,2)

  product(x,y)

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

格式:div(1,x)

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

8、pow,pow 表示冪值。pow(x,y) =x^y。

格式:pow(x,0.5) 表示開方

  pow(x,log(y))

9、abs,abs(x)將返回表達式的絕對值

格式:abs(-5)

  abs(x)

10、log,log(x)將會返回基數為 10,x 的對數

格式:log(x)

  log(sum(x,100))

11、sqrt,sqrt(x) 返回 一個數的平方根

格式:sqrt(2)

  sqrt(sum(x,100))

12、map,如果 min =x =max,那么 map(x,min,max,target)=target,如果 x 不在 [min,max] 這個區間內,那么 map(x,min,max,target)=x.

格式:map(x,0,0,1)

13、scale,scale(x,minTarget,maxTarget) 這個函數將會把 x 的值限制在 [minTarget,maxTarget] 范圍內。

14、query,query(subquery,default)將會返回給定 subquery 的分數,如果 subquery 與文檔不匹配,那么將會返回默認值。任何的查詢類型都是受支持的。可以通過引用的方式,也可以直接指定查詢串。

  例子:q=product(popularity, query({!dismax v= solr rocks})) 將會返回 popularity 和通過 dismax 查詢得到的分數的乘積。

  q=product(popularity, query($qq) qq={!dismax}solr rocks) 跟上一個例子的效果是一樣的。不過這里使用的是引用的方式

  q=product(popularity, query($qq,0.1) qq={!dismax}solr rocks) 在前一個例子的基礎上又加了一個默認值。

15、linear,linear(x,m,c)表示 m*x+c , 其中 m 和 c 都是常量,x 是一個變量也可以是一個函數。

例如:linear(x,2,4)=2*x+4.

16、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)

17、max,max(x,c)將會返回一個函數和一個常量之間的最大值。

例如:max(myfield,0)

“Solr 的函數查詢怎么使用”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注丸趣 TV 網站,丸趣 TV 小編將為大家輸出更多高質量的實用文章!

正文完
 
丸趣
版權聲明:本站原創文章,由 丸趣 2023-08-16發表,共計2313字。
轉載說明:除特殊說明外本站除技術相關以外文章皆由網絡搜集發布,轉載請注明出處。
評論(沒有評論)
主站蜘蛛池模板: 沁水县| 肥西县| 都昌县| 嘉定区| 合阳县| 平和县| 葵青区| 长岛县| 浦东新区| 惠水县| 芒康县| 昭通市| 巴青县| 冀州市| 文水县| 平阴县| 忻城县| 安化县| 本溪市| 策勒县| 娄底市| 神木县| 循化| 兴国县| 庆元县| 泸州市| 海晏县| 新沂市| 景东| 曲麻莱县| 宁德市| 隆昌县| 修水县| 英吉沙县| 临汾市| 陆良县| 南康市| 工布江达县| 高尔夫| 丹江口市| 永胜县|