全部產品
Search
文件中心

OpenSearch:排序運算式

更新時間:Jul 20, 2024

運算式文法

召回引擎版支援使用者使用內建支援的運算子定製自己的算分公式,召回引擎版支援的運算子如下所示:

運算

運算子

說明

一元運算

-

負號,功能為對某個運算式的值取負值,如-1, -max(width)。

算數運算

+, -, *, /

如width / 10

關係運算

==,!= ,>, <, >=, <=

如width>=400

邏輯運算

and ,or,!

如width>=400 and height >= 300, !(a > 1 and b < 2)

位元運算

&, |,^

如 3 & (price ^ pubtime) + (price | pubtime)

條件運算

if(cond, thenValue, elseValue)

如果cond的值非0,則該if運算式的實際值為thenValue,否則為elseValue。如if(2, 3, 5)的值為3,if(0, 3, 5)的值為5。(注意:不支援字串欄位類型,如literal或text類型都不支援;取值範圍為int32的取值範圍)

in 運算

i in (value1, value2, …, valuen)

如果i的值在集合[value1, value2, …, valuen]中出現,則該運算式值為1,否則為0。例如: 2 in [2, 4, 6]的值為1,3 in [2, 4, 6]的值為0。

在運算式中使用者可以使用schema定義的屬性欄位、也可以使用內建的各種函數以及各種特徵函數。

內建函數

函數

說明

max(a, b)

取a和b的最大值。

min(a, b)

取a和b的最小值。

ln(a)

對a取自然對數。

log2(a)

對a取以2為底的對數。

log10(a)

對a取以10為底的對數。

sin(a)

正弦函數。

cos(a)

餘弦函數。

tan(a)

正切函數。

asin(a)

反正弦函數

acos(a)

反餘弦函數

atan(a)

反正切函數。

ceil(a)

對a向上取整,如ceil(4.2)為5。

floor(a)

對a向下取整,如floor(4.6)為4。

sqrt(a)

對a開方,如sqrt(4)為2。

pow(a,b)

返回a的b次冪,如pow(2, 3)為8。

now()

返回目前時間,自Epoch (00:00:00 UTC, January 1, 1970)開始計算,單位是秒。

random()

返回[0, 1]間的一個隨機值。

特徵函數

函數名稱

描述

粗排

精排

static_bm25

靜態文本相關性,用于衡量query與文檔的匹配度

支援

不支援

exact_match_boost

擷取查詢中使用者指定的查詢詞權重最大值

支援

支援

timeliness

時效分,用于衡量文檔的新舊程度

支援

支援

timeliness_ms

時效分,用于衡量文檔的新舊程度

支援

支援

normalize

歸一化函數,根據不同的演算法將數值歸一化至[0, 1]

支援

支援

distance

擷取兩個點之間的球面距離,一般用於LBS的距離計算

支援

支援

gauss_decay

使用高斯函數,根據數值和給定的起始點之間的距離,計算其衰減程度

支援

支援

linear_decay

使用線性函數,根據數值和給定的起始點之間的距離,計算其衰減程度

支援

支援

exp_decay

使用指數函數,根據數值和給定的起始點之間的距離,計算其衰減程度

支援

支援

kvpairs_value

擷取查詢串中kvpairs子句中指定欄位的值

支援

支援

in/notin

判斷欄位值是否(不)在指定列表中

支援

支援

tag_match

用於對查詢語句和文檔做標籤匹配,使用匹配結果對文檔進行算分加權

支援

支援

first_phase_score

擷取粗排運算式最終計算分值

不支援

支援

text_relevance

關鍵詞在欄位上的文本匹配度

不支援

支援

field_match_ratio

擷取某欄位上與查詢詞匹配的分詞片語個數與該欄位總片語個數的比值

不支援

支援

query_match_ratio

擷取查詢詞中(在某個欄位上)命中片語個數與總片語個數的比值

不支援

支援

fieldterm_proximity

用來表示關鍵詞分詞片語在欄位上的緊密程度

不支援

支援

field_length

擷取某個欄位上的分詞片語個數

不支援

支援

query_term_count

返回查詢詞分詞後片語個數

不支援

支援

query_term_match_count

擷取查詢詞中(在某個欄位上)命中文檔的片語個數

不支援

支援

field_term_match_count

擷取文檔中某個欄位與查詢詞匹配的片語個數

不支援

支援

query_min_slide_window

查詢詞在某個欄位上命中的分詞片語個數與該片語在欄位上最小視窗的比值

不支援

支援

排序運算式的使用

粗排運算式

在粗排中使用運算式需要在kvpairs中指定first_formula,內容為運算式,並且可以通過在config子句中設定rank_trace查看算分邏輯,例如:

config=start:0,hit:10,rank_trace:DEBUG,format:json&&query=default:'搜尋'&&kvpairs=first_formula:price*0.1

精排運算式

在精排中使用運算式需要在kvpairs中指定formula,內容為運算式,並且可以通過在config子句中設定rank_trace查看算分邏輯,例如:

config=start:0,hit:10,rank_trace:DEBUG,format:json&&query=default:'搜尋'&&kvpairs=formula:price*0.1

注意事項

  • 參與粗排的文檔數比較多,需要控制好粗排運算式的複雜度,否則容易逾時。

  • 可以在一次查詢中同時使用粗排和精排運算式。