按字段值分面搜索

2019-08-14 14:12 更新

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

如果您還是不清楚它的概念,敬請(qǐng)參閱這篇文章

1. 適用情況

在 xunsearch 中,分面搜索是按照字段的值來實(shí)現(xiàn)的,為了結(jié)合條件做篩選搜索, 支持分面的字段需要進(jìn)行索引,而它的分詞方式最好必須是 full 即整值索引。

2. 用法詳細(xì)示范

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

那么在構(gòu)建搜索語句時(shí)使用 XSSearch::setFacets 方法來指定需要分面的字段, 該方法接受兩個(gè)參數(shù),第一參數(shù)為要分面的字段名稱(多個(gè)字段請(qǐng)用數(shù)組作參數(shù)), 第二參數(shù)是可選的布爾類型,true 表示需要準(zhǔn)確統(tǒng)計(jì),默認(rèn) false 則為估算。

執(zhí)行搜索之后再調(diào)用 XSSearch::getFacets 方法可取回分面搜索結(jié)果。

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

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

此外,分面搜索僅針對(duì)字段值較短的情況,當(dāng)字段值的長度超過 255 字節(jié)時(shí)會(huì)被忽略而不參與統(tǒng)計(jì)。

每次搜索最多同時(shí)支持 8 個(gè)字段進(jìn)行分面搜索,分面字段必須是“字符串”類型。


以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)