Lucence.Net学习+盘古分词

创建索引库

//读取文件,存储到索引库

public string CreateDatebase()

{

//获取索引库的路径

var indexPath = AppDomain.CurrentDomain.BaseDirectory + ConfigurationManager.AppSettings["IndexDateBase"];

FSDirectory directory = FSDirectory.Open(new DirectoryInfo(indexPath), new NoLockFactory());

IndexReader reader = IndexReader.Open(directory, true);

var searcher = new IndexSearcher(reader);

//搜索条件

var query = new PhraseQuery();

foreach (string word in GetPanGuAnalyzer(str))//先用空格,让用户去分词,空格分隔的就是词“计算机   专业”

{

query.Add(new Term("body", word));

}

//组成词的字之间可以允许的距离

query.SetSlop(5);

TopScoreDocCollector collector = TopScoreDocCollector.create(1000, true);

searcher.Search(query, null, collector);//根据query查询条件进行查询,查询结果放入collector容器

ScoreDoc[] docs = collector.TopDocs(0, collector.GetTotalHits()).scoreDocs;//得到所有查询结果中的文档,GetTotalHits():表示总条数   TopDocs(300, 20);//表示得到300(从300开始),到320(结束)的文档内容.

var  list = new List<string>();

for (int i = 0; i < docs.Length; i++)

{

int docId = docs[i].doc;//得到查询结果文档的id(Lucene内部分配的id)

Document doc = searcher.Doc(docId);//找到文档id对应的文档详细信息

var _str = doc.Get("body");

list.Add(_str);

}

ViewBag.List = list;

return View();

}

进行搜索

public ActionResult List(string  str)

{

//获取索引库的路径

var indexPath = AppDomain.CurrentDomain.BaseDirectory + ConfigurationManager.AppSettings["IndexDateBase"];

FSDirectory directory = FSDirectory.Open(new DirectoryInfo(indexPath), new NoLockFactory());

IndexReader reader = IndexReader.Open(directory, true);

var searcher = new IndexSearcher(reader);

//搜索条件

var query = new PhraseQuery();

foreach (string word in GetPanGuAnalyzer(str))//先用空格,让用户去分词,空格分隔的就是词“计算机   专业”

{

query.Add(new Term("body", word));

}

//组成词的字之间可以允许的距离

query.SetSlop(5);

TopScoreDocCollector collector = TopScoreDocCollector.create(1000, true);

searcher.Search(query, null, collector);//根据query查询条件进行查询,查询结果放入collector容器

ScoreDoc[] docs = collector.TopDocs(0, collector.GetTotalHits()).scoreDocs;//得到所有查询结果中的文档,GetTotalHits():表示总条数   TopDocs(300, 20);//表示得到300(从300开始),到320(结束)的文档内容.

var  list = new List<string>();

for (int i = 0; i < docs.Length; i++)

{

int docId = docs[i].doc;//得到查询结果文档的id(Lucene内部分配的id)

Document doc = searcher.Doc(docId);//找到文档id对应的文档详细信息

var _str = doc.Get("body");

list.Add(_str);

}

ViewBag.List = list;

return View();

}

/// 对传递过来的字符串进行盘古分词

/// </summary>

/// <returns></returns>

public static List<string> GetPanGuAnalyzer(string txt)

{

List<string> list = new List<string>();

Analyzer analyzer = new PanGuAnalyzer();

TokenStream tokenStream = analyzer.TokenStream("", new StringReader(txt));

Lucene.Net.Analysis.Token token = null;

while ((token = tokenStream.Next()) != null)

{

list.Add(token.TermText());

}

return list;

}

要添加的文件

时间: 2024-09-29 11:31:48

Lucence.Net学习+盘古分词的相关文章

lucence.net+盘古分词

第一步: 添加盘古和lucence的dll引用 第二步: 拷贝Dict文件夹到项目  demo里面是Dictionaries 不过官方建议改成Dict 然后把所有项右击属性 改为“如果较新则复制” 第三步 创建索引库,这里是一次性把数据库里的数据   循环写入了,正常项目里可以把循环打开,每报错一个数据  执行一遍 /// <summary> /// 创建索引库 /// </summary> public void CreateContent() { string indexPat

Lucene.net入门学习(结合盘古分词)

Lucene简介 Lucene是apache软件基金会4 jakarta项目组的一个子项目,是一个开放源代码的全文检索引擎工具包,即它不是一个完整的全文检索引擎,而是一个全文检索引擎的架构,提供了完整的 查询引擎和索引引擎,部分文本分析引擎(英文与德文两种西方语言).Lucene的目的是为软件开发人员提供一个简单易用的工具包,以方便的在目标系统中 实现全文检索的功能,或者是以此为基础建立起完整的全文检索引擎. Lucene.net简介 Lucene.net是Lucene的.net移植版本,是一个

Lucene.Net3.0.3+盘古分词器学习使用

一.Lucene.Net介绍 Lucene.net是Lucene的.net移植版本,是一个开源的全文检索引擎开发包,即它不是一个完整的全文检索引擎,而是一个全文检索引擎的架构,提供了完整的查询引擎和索引引擎.开发人员可以基于Lucene.net实现全文检索的功能. Lucene.net是Apache软件基金会赞助的开源项目,基于Apache License协议. Lucene.net并不是一个爬行搜索引擎,也不会自动地索引内容.我们得先将要索引的文档中的文本抽取出来,然后再将其加到Lucene.

lucene.net 3.0.3、结合盘古分词进行搜索的小例子(转)

lucene.net 3.0.3.结合盘古分词进行搜索的小例子(分页功能) 添加:2013-12-25 更新:2013-12-26 新增分页功能. 更新:2013-12-27 新增按分类查询功能,调整索引行新增记录的图片字段. //封装类 [csharp] view plaincopyprint? using System; using System.Collections.Generic; using System.Linq; using System.Web; using Lucene.Ne

Lucene.Net+盘古分词

前言 各位朋友,谢谢大家的支持,由于文件过大,有考虑到版权的问题,故没有提供下载,本人已建立一个搜索技术交流群:77570783,源代码已上传至群共享,需要的朋友,请自行下载! 首先自问自答几个问题,以让各位看官了解写此文的目的 什么是站内搜索?与一般搜索的区别?很多网站都有搜索功能,很多都是用SQL语句的Like实现的,但是Like无法做到模糊匹配(例如我搜索“.net学习”,如果有“.net的学习”,Like就无法搜索到,这明显不符合需求,但是站内搜索就能做到),另外Like会造成全盘扫描,

Lucene.Net+盘古分词-&gt;开发自己的搜索引擎

//封装类 using System;using System.Collections.Generic;using System.Linq;using System.Web;using Lucene.Net.Analysis;using Lucene.Net.Index;using Lucene.Net.Documents;using System.Reflection;using Lucene.Net.QueryParsers;using Lucene.Net.Search;namespace

盘古分词

盘古分词是一个基于 .net framework 的中英文分词组件.主要功能 中文未登录词识别 盘古分词可以对一些不在字典中的未登录词自动识别 词频优先 盘古分词可以根据词频来解决分词的歧义问题 多元分词 盘古分词提供多重输出解决分词粒度和分词精度权衡的问题 中文人名识别 输入: “张三说的确实在理” 分词结果:张三/说/的/确实/在理/ 输入 “李三买了一张三角桌子” 分词结果:李三/买/了/一张/三角/桌子/ 强制一元分词 输入 “张三说的确实在理” 分词结果: 张(0,1)/张三(0,5)

Lucene.Net 与 盘古分词

1.关键的一点,Lucene.Net要使用3.0以下的版本,否则与盘古分词接口不一致. 版权声明:本文为博主原创文章,未经博主允许不得转载.

lucene+盘古分词

一般的网站都会有都会有搜索的功能,一般实现搜索主要有三种方案 第一种是最差的,也是最不推荐的,使用数据库的模糊查询例如select * form table where 字段 like XXX,这种查询的缺点很明显: (1)       无法查找几个关键词不连在一起的情况 (2)       全表扫描 效率低下 第二种:使用SqlServer的全文本检索功能 举例:select * form table where msg = ‘江苏南京’ 这是就可以写成select * form table