站內搜尋 Lucene 盤古分詞

2022-01-16 04:34:37 字數 3274 閱讀 3998

為了方便的學習站內搜尋,下面我來演示乙個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()

else//建立索引

return content("ok");

}

searchbookcontent類:

//執行索引語句

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;

}

viewsearchcontentmodel類:(這個類定義在mvc中的model裡面的,檢視要展示啥資料,這裡就定義什麼)

->前台修改如下:

}    

%>

-----這時基本搜尋功能就實現了,接下來實現高亮顯示-------

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....