W3Cschool
恭喜您成為首批注冊(cè)用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
分面搜索在英文中通常表述為 Facets Search
,被檢索的數(shù)據(jù)通具有多維度屬性。 例如一本書包含主題、作者、年代等,而分面搜索是指通過事物的這些屬性不斷篩選、 過濾搜索結(jié)果的方法,可以將分面搜索看成搜索和瀏覽的結(jié)合。
如果您還是不清楚它的概念,敬請(qǐng)參閱這篇文章。
在 xunsearch
中,分面搜索是按照字段的值來實(shí)現(xiàn)的,為了結(jié)合條件做篩選搜索, 支持分面的字段需要進(jìn)行索引,而它的分詞方式最好必須是 full
即整值索引。
以論壇文章搜索為例,每篇文章均屬于不同版塊(字段為 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)行分面搜索,分面字段必須是“字符串”類型。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: