可使用如下模式對搜尋結果排序:
sph_sort_relevance忽略任何附加的引數,永遠按相關度評分排序。所有其餘的模式都要求額外的排序子句,子句的語法跟具體的模式有關。sph_sort_attr_asc, sph_sort_attr_desc以及sph_sort_time_segments這三個模式僅要求乙個屬性名。sph_sort_relevance模式等價於在擴充套件模式中按"@weight desc, @id asc"排序,sph_sort_attr_asc 模式等價於"attribute asc, @weight desc, @id asc",而sph_sort_attr_desc 等價於"attribute desc, @weight desc, @id asc"。
sph_sort_time_segments 模式
在sph_sort_time_segments模式中,屬性值被分割成「時間段」,然後先按時間段排序,再按相關度排序。
時間段是根據搜尋發生時的當前時間戳計算的,因此結果隨時間而變化。
時間段的分法固化在搜尋程式中了,但如果需要,也可以比較容易地改變(需要修改原始碼)。
這種模式是為了方便對blog日誌和新聞提要等的搜尋而增加的。使用這個模式時,處於更近時間段的記錄會排在前面,但是在同一時間段中的記錄又根據相關度排序-這不同於單純按時間戳排序而不考慮相關度。
sph_sort_extended 模式
在 sph_sort_extended 模式中,您可以指定乙個類似sql的排序表示式,但涉及的屬性(包括內部屬性)不能超過5個,例如:
@relevance desc, price asc, @id desc
只要做了相關設定,不管是內部屬性(引擎動態計算出來的那些屬性)還是使用者定義的屬性就都可以使用。內部屬性的名字必須用特殊符號@開頭,使用者屬性按原樣使用就行了。在上面的例子裡,@relevance和@id是內部屬性,而price是使用者定義屬性。
已知的內建屬性:
@id (匹配文件的 id)
@weight (匹配權值)
@rank (等同 weight)
@relevance (等同 weight)
@random (隨機順序返回結果)
@rank 和 @relevance 只是 @weight 的別名。
sph_sort_expr 模式
表示式排序模式使您可以對匹配項按任何算術表示式排序,表示式中的項可以是屬性值,內部屬性(@id和@weight),算術運算子和一些內建的函式。例如:
$cl->setsortmode ( sph_sort_expr,
"@weight + ( user_karma + ln(pageviews) )*0.1" );
支援的運算子和函式如下。它們是模仿mysql設計的。函式接受引數,引數的數目根據具體函式的不同而不同。
運算子: +, -, *, /, <, > <=, >=, =, <>.
布林操作符: and, or, not.
無參函式: now().
一元函式(乙個引數): abs(), ceil(), floor(), sin(), cos(), ln(), log2(), log10(), exp(), sqrt(), bigint().
二元函式(兩個引數): min(), max(), pow(), idiv().
其他函式: if(), interval(), in(), geodist().
參考**
Sphinx排序模式
目前sphinx支援6種排序模式。分別是 1.sph sort relevance 2.sph sort attr desc 3.sph sort attr asc 4.sph sort time segments 5.sph sort extended 6.sph sort expr 第一種表示按...
容器排序 策略模式
將比較的方法封裝到單獨的乙個類中,做到實體類和方法類分離。方法類實現comparator介面。在上一片部落格中,是用氣泡排序法進行排序,在實際的應用中,我們直接呼叫collections類中的sort方法即可,具體請看jdk幫助文件。1 package hl7 11 23 import j a.ut...
設計模式 組合模式 商品排序案例
所有的例子均 與實際開發專案 本節介紹組合模式的使用 商品結果排序評分系統 首先還是重複一下 設計模式是思路,而不是一味套用,如果業務場景和功能需求恰好吻合,那最好不過 如果有偏差,一定要具體情況具體分析,更具實際場景選擇合適的模式型別 注意,是型別,並不特定指某種模式,有的時候乙個場景多種模式都可...