最近咱們搜易站內搜索系統的一個客戶須要一個無限級分類和分類統計功能,要實現的效果以下:網站
但因爲搜易站內搜索系統是基於Lucene.net 2.0開發的,並無內置的分類統計搜索功能,因而乎只能本身實現了,考慮到客戶的總數據量和搜索量不是特別大,因而用了簡單有效的方式來實現:.net
由於涉及到分類的操做,可是每一個站點的分類體系仍是有些不同的,本文主要提供思路和部分演示代碼,給有須要的童鞋參考:對象
思路:blog
首先想到Lucene搜索出來的結果是一個Hits對象,Hits其實就是一個搜索結果文檔的集合對象,那麼遍歷這個集合對象,跟給定的分類字段比對,存在就+1 。
圖片
代碼示例:資源
Lucene.Net.Search.Hits hits = Searcher.Search(querystring) ;開發
int hcount = hits.Length();文檔
Lucene.Net.Documents.Document doc = null;
for (int i = 0; i < hcount; i++)
{
doc = hits.Doc(i);
string c1 = doc.GetField("Cate1").StringValue();get
//判斷是否存在於給定的分類集合中,存在則加1string
if (parameter.Cate1Groups.ContainsKey(c1))
{
parameter.Cate1Groups[c1] = parameter.Cate1Groups[c1] + 1;
}
else
{
parameter.Cate1Groups.Add(c1, 1);
}
}
適用場景:
這種實現方式比較適合中小型網站,在數據量和搜索量不大的狀況下可用。
題外話:
之前一直以爲,做爲一箇中小型網站,搜索的篩選不該該太多,畢竟海量數據的百度,谷歌都簡單到只有一個搜索框,後來通過跟一些站長的交流後發現,其實並非的這樣的,有些網站,好比圖片,素材,資源類網站,用戶對這類網站的站內搜索的使用頻率很是高的,對搜索質量,效率和精準篩選有比較高的要求,搜索的PV佔比整站PV的比重是很高,若是搜索作的很差,對流量影響很是大,由於站內搜索好用的話,對PV的提高是雙倍甚至幾倍的,反之也是同樣的。