文檔說明

按字段值分面搜索

分面搜索在英文中通常表述為 Facets Search,被檢索的數據通具有多維度屬性。 例如一本書包含主題、作者、年代等,而分面搜索是指通過事物的這些屬性不斷篩選、 過濾搜索結果的方法,可以將分面搜索看成搜索和瀏覽的結合。

如果您還是不清楚它的概念,敬請參閱這篇文章。

1. 適用情況

xunsearch 中,分面搜索是按照字段的值來實現的,為了結合條件做篩選搜索, 支持分面的字段需要進行索引,而它的分詞方式最好必須是 full 即整值索引。

2. 用法詳細示范

以論壇文章搜索為例,每篇文章均屬于不同版塊(字段為 fid)、不同的發表年份 (字段為 year),我們需要在搜索結果中按年份、版塊顯示匹配的文章數。

那么在構建搜索語句時使用 XSSearch::setFacets 方法來指定需要分面的字段, 該方法接受兩個參數,第一參數為要分面的字段名稱(多個字段請用數組作參數), 第二參數是可選的布爾類型,true 表示需要準確統計,默認 false 則為估算。

執行搜索之后再調用 XSSearch::getFacets 方法可取回分面搜索結果。

// 在搜索時加入分面設置
$docs = $search->setQuery('關鍵詞')->setFacets(array('fid', 'year'))->search();
 
// 讀取分面結果
$fid_counts = $search->getFacets('fid'); // 返回數組,以 fid 為鍵,匹配數量為值
$year_counts = $search->getFacets('year'); // 返回數組,以 year 為鍵,匹配數量為值
 
// 遍歷 $fid_counts, $year_counts 變量即可得到各自篩選條件下的匹配數量
foreach ($fid_counts as $fid => $count)
{
    echo "其中版塊ID為 $fid 的匹配數為: $count\n";
}
 
// ...
// 通??梢匝h生成新的搜索鏈接,在搜索鏈接中加入字段搜索條件即可
// ...
 
// 然后像往常一樣使用 $docs 顯示文檔

Tip: 出于性能考慮,分面搜索返回的匹配數量默認是估算的,比實際數量可能會偏小。 如果您確實需要得到精確數字,請將 XSSearch::setFacets 的第二參數設為 true 。

此外,分面搜索僅針對字段值較短的情況,當字段值的長度超過 255 字節時會被忽略而不參與統計。

每次搜索最多同時支持 8 個字段進行分面搜索,分面字段必須是“字符串”類型。

$Id$

留下一條評論吧!

請到論壇 登錄 后刷新本頁面!

青海快三开奖走势图_ 场外配资搞不搞的 安徽体彩十一选五基本走势图 排列五近500期走势图 天天三分彩是官方开的吗 京东方股票会跌破4元吗 泳坛夺金基本走势图 重庆时时彩计划软件器 福建22选五开奖查询 广东十一选五是正规彩票吗 一分彩开奖结果没有