sphinx SPH_MATCH_EXTENDED2 基本應用

匹配模式

有如下可選的匹配模式:

SPH_MATCH_ALL, 匹配所有查詢詞(默認模式);

SPH_MATCH_ANY, 匹配查詢詞中的任意一個;

SPH_MATCH_PHRASE, 將整個查詢看作一個詞組,要求按順序完整匹配;

SPH_MATCH_BOOLEAN, 將查詢看作一個布爾表達式

SPH_MATCH_EXTENDED, 將查詢看作一個CoreSeek/Sphinx內部查詢語言的表達式 . 從版本Coreseek 3/Sphinx 0.9.9開始, 這個選項被選項SPH_MATCH_EXTENDED2代替,它提供了更多功能和更佳的性能。保留這個選項是爲了與遺留的舊代碼兼容——這樣即使Sphinx及其組件包括API升級的時候,舊的應用程序代碼還能夠繼續工作。

SPH_MATCH_EXTENDED2, 使用第二版的“擴展匹配模式”對查詢進行匹配.

SPH_MATCH_FULLSCAN, 強制使用下文所述的“完整掃描”模式來對查詢進行匹配。注意,在此模式下,所有的查詢詞都被忽略,儘管過濾器、過濾器範圍以及分組仍然起作用,但任何文本匹配都不會發生.

我們要關注的主要是SPH_MATCH_EXTENDED2擴展匹配模式,擴展匹配模式允許使用一些像mysql的條件語句

//設置擴展匹配模式

$sphinx->SetMatchMode ( "SPH_MATCH_EXTENDED2" );

//查詢中使用條件語句,字段用@開頭,搜索內容包含測試,toid等於1的郵件:

$result = $sphinx->query('@content (測試) & @toid =1', '*');

//用括號和&(與)、|、(或者)、-(非,即!=)設置更復雜的條件

$result = $sphinx->query('(@content (測試) & @subject =呃) | (@fromid -(100))', '*');

//更多語法請查看官方文檔匹配模式的說明

擴展匹配模式中值得一提的是搜索的字段,如果該字段被設置屬性,那麼擴展匹配搜索的字段默認是不包含這些屬性的,只能用SetFilter()或者SetFilterRange()之類

之前我們設置了fromid、toid、sendtime爲屬性,但又想在擴展匹配模式中又想用作條件該怎麼辦?

只要在sql_query語句中再選擇多一次該字段就可以了

sql_query                = SELECT emailid,fromid,fromid,toid,toid,subject,content,sendtime,sendtime,attachement FROM email

//設置完成記得重新建立索引

更多條件技巧

只是一些技巧,但不建議使用的部署環境中,至於爲什麼,請看文章結尾

<、<=、>、>=

默認sphinx沒有這些比較符。

假如我想郵件的發送時間大於某一日期怎麼辦?用SetFilterRange()方法模擬一下

//大於等於某一時間截$time

$sphinx->SetFilterRange('sendtime', $time, 10000000000) //時間截最大是10個9,再加1是不可超越了。。

 

//大於某一時間截$time

$sphinx->SetFilterRange('sendtime', $time+1, 10000000000)

//小於等於某一時間截$time

$sphinx->SetFilterRange('sendtime', -1, $time)    //時間截最小是0,所以應該減1

//大於某一時間截$time

$sphinx->SetFilterRange('sendtime', -1, $time - 1)



評分模式。目前只在SPH_MATCH_EXTENDED2這個匹配模式中提供。參數必須是與某個已知模式對應的常數。

Sphinx默認計算兩個對最終匹配權重有用的因子。主要是查詢詞組與文檔文本的相似度。其次是稱之爲BM25的統計函數,該函數值根據關鍵字文檔中的頻率(高頻導致高權重)和在整個索引中的頻率(低頻導致高權重)在0和1之間取值。

然而,有時可能需要換一種計算權重的方法——或者可能爲了提高性能而根本不計算權值,結果集用其他辦法排序。這個目的可以通過設置合適的相關度計算模式來達到。




===========================


發佈了73 篇原創文章 · 獲贊 11 · 訪問量 35萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章