WIKI使用導(dǎo)航
站長百科導(dǎo)航
站長專題
- 網(wǎng)站推廣
- 網(wǎng)站程序
- 網(wǎng)站賺錢
- 虛擬主機
- cPanel
- 網(wǎng)址導(dǎo)航專題
- 云計算
- 微博營銷
- 虛擬主機管理系統(tǒng)
- 開放平臺
- WIKI程序與應(yīng)用
- 美國十大主機
Sphinx/結(jié)果分組
有時將搜索結(jié)果分組(或者說“聚類”)并對每組中的結(jié)果計數(shù)是很有用的-例如畫個漂亮的圖來展示每個月有多少的blog日志,或者把Web搜索結(jié)果按站點分組,或者把找到的論壇帖子按其作者分組。
理論上,這可以分兩步實現(xiàn):首先在Sphinx中做全文檢索,再在SQL服務(wù)器端對得到的ID分組。但是現(xiàn)實中在大結(jié)果集(10K到10M個匹配)上這樣做通常會嚴(yán)重影響性能。
為避免上述問題,Sphinx提供了一種“分組模式”,可以用API調(diào)用SetGroupBy()來開啟。在分組時,根據(jù)group-by值給匹配項賦以一個分組。這個值用下列內(nèi)建函數(shù)之一根據(jù)特定的屬性值計算:
- SPH_GROUPBY_DAY, 從時間戳中按YYYYMMDD格式抽取年、月、日;
- SPH_GROUPBY_WEEK, 從時間戳中按YYYYNNN格式抽取年份和指定周數(shù)(自年初計起)的第一天;
- SPH_GROUPBY_MONTH, 從時間戳中按YYYYMM格式抽取月份;
- SPH_GROUPBY_YEAR, 從時間戳中按YYYY格式抽取年份;
- SPH_GROUPBY_ATTR, 使用屬性值自身進行分組.
最終的搜索結(jié)果中每組包含一個最佳匹配。分組函數(shù)值和每組的匹配數(shù)目分別以“虛擬”屬性 @group 和 @count 的形式返回.
結(jié)果集按group-by排序子句排序,語法與SPH_SORT_EXTENDED 排序子句的語法相似。除了@id和@weight,分組排序子句還包括:
- @group (groupby函數(shù)值),
- @count (組中的匹配數(shù)目).
默認模式是根據(jù)groupby函數(shù)值降序排列,即按照 "@group desc".
排序完成時,結(jié)果參數(shù)total_found會包含在整個索引上匹配的組的總數(shù)目。
注意: 分組操作在固定的內(nèi)存中執(zhí)行,因此它給出的是近似結(jié)果;所以total_found報告的數(shù)目可能比實際給出的個分組數(shù)目的和多。@count也可能被低估。要降低不準(zhǔn)確性,應(yīng)提高max_matches。如果max_matches允許存儲找到的全部分組,那結(jié)果就是百分之百準(zhǔn)確的。
例如,如果按相關(guān)度排序,同時用SPH_GROUPBY_DAY函數(shù)按屬性"published"分組,那么:
- 結(jié)果中包含每天的匹配結(jié)果中最相關(guān)的那一個,如果那天有記錄匹配的話,
- 結(jié)果中還附加給出天的編號和每天的匹配數(shù)目,
- 結(jié)果以天的編號降序排列(即最近的日子在前面)。