為了方便的學習站內搜尋,下面我來演示乙個mvc專案。
1.首先在專案中【新增引入】三個程式集和【dict】資料夾,並新建乙個【分詞內容存放目錄】
2.建立search控制器,並轉到index介面寫入如下內容:
ps:vs有問題,波浪號由他去吧,,,
----------後台語句-------
->建立索引語句
public actionresult searchcontent()執行建立索引語句,將看到分詞內容資料夾裡面將多一些東西,這些就是用來以後檢索的else//建立索引
return content("ok");
}//建立索引語句
public void createsearchindex()
}indexwriter writer = new indexwriter(directory, new panguanalyzer(), !isupdate, lucene.net.index.indexwriter.maxfieldlength.unlimited);
//-------呼叫業務層拿到所有的資料
search.bll.userguidbll bll = new search.bll.userguidbll();
listlist=bll.selectall();
foreach (userinfo item in list)
writer.close();//會自動解鎖
directory.close();//不要忘了close,否則索引結果搜不到
}
->執行索引語句
public actionresult searchcontent()searchbookcontent類:else//建立索引
return content("ok");
}
//執行索引語句viewsearchcontentmodel類:(這個類定義在mvc中的model裡面的,檢視要展示啥資料,這裡就定義什麼)public listsearchbookcontent()
query.setslop(100);//兩個詞的距離大於100(經驗值)就不放入搜尋結果,因為距離太遠相關度就不高了
topscoredoccollector collector = topscoredoccollector.create(1000, true);//盛放查詢結果的容器
searcher.search(query, null, collector);//使用query這個查詢條件進行搜尋,搜尋結果放入collector
總的結果條數
scoredoc docs = collector.topdocs(0, collector.gettotalhits()).scoredocs;//從查詢結果中取出第m條到第n條的資料
listlist = new list();
for (int i = 0; i < docs.length; i++)//遍歷查詢結果
return list;
}class searchresult
public string msg
}//利用盤古分詞對使用者輸入的內容進行分詞
public static listgetpanguword(string str)
return list;
}
->前台修改如下:
}-----這時基本搜尋功能就實現了,接下來實現高亮顯示-------%>
1.新增或引入pangu.highlight和pangu.highlight.pdb
建立乙個common資料夾,並在裡面建立乙個webcommon類
**如下:(這個類中引數keyworkds就是要高亮顯示的值,content就是返回的內容,這樣在搜尋結果中呼叫這個類就能實現高亮)
using system;在搜尋結果中呼叫這個類:using system.collections.generic;
using system.linq;
using system.web;
using pangu.highlight;
using pangu;
namespace 站內搜尋2.common}}
// viewmodel.content = doc.get("content");寫到這先放張效果圖吧:viewmodel.content = common.webcommon.createhighlight(request["txtcontent"], doc.get("content"));
注意:有的時候我們使用razor引擎,會發生自動編碼問題,為了正常顯示,我們可以這樣寫:@mvchtmlstring.create(item.title)
js側欄分享**:
最後再補充一下分詞工具使用方式:站內搜尋 分詞(二元 盤古)
一般的 中都有站內搜尋,如果使用like去做,效率就會很低。所以,lucene.net 搜尋引擎核心 就會被大家所採用。一 分詞 分詞是核心的演算法,lucene.net本身是不提供分詞演算法的。示例 analyzer analyzer new panguanalyzer 盤古分詞 analyzer...
mysql站內搜尋 Sphinx站內搜尋
一 sphinx流程 mysql資料 sphinx 索引資料 二 sphinx概述 三 sphinx使用地方 1 中的搜尋 站內搜尋 2 系統後台中的搜尋 四 為什麼要使用sphinx 當資料超過100w時,我們需要使用第三方工具,sphinx。1 做搜尋時當資料量大單純的mysql搜尋比較慢 如果...
Lucene和PanGu(盤古分詞)
先用盤古分詞生成索引,然後對進行查詢語句進行分詞查詢。比較簡單。using system using system.collections.generic using system.linq using system.web using system.web.ui using system.web....