基于ASP.NET的lucene.net全文搜索实施步骤
做项目的时候需要加上全文搜索,选择lucene.net的方向,做一些调研,基本达到要求,现在分享给大家。请原谅我理解不深。需求完成后,会查看大量材料。本文不介绍lucene.net项目的详细建立,只介绍如何全文检索文献。请访问如何建立lucene.net的项目。使用lucene.net搜索分为两部分。第一部分是创建文本内容的索引和索引。第二部分是根据创建的索引进行搜索。如何对文档进行索引,主要是对文档的内容进行索引。关键是提取文档的内容。根据常规实现,以txt格式提取文本相对简单。如果实现了txt文本的提取,接下来就容易多了。高层建筑从地面升起,这是基础。1.首先,创建ASP.NET页面。
这是一个极其简单的页面,创建页面之后,双击各个按钮生成相应的点击事件,在相应的点击事件中实现程序设计。2.实现索引部分。前面已经说到了,索引主要是根据文本内容建立索引,所以要提取文本内容。创建提取文本文件(文本文件)格式文档文本内容的函数。复制代码代码如下://提取文本文件(文本文件)文件公共静态字符串FileReaderAll(文件信息文件名){//读取文本内容,并且默认编码格式,防止出现乱码StreamReader=新的流阅读器(文件名。全名,系统。文本。编码。默认);字符串行=' ';字符串温度=' ';//循环读取文本内容while ((line=reader .ReadLine())!=null){ temp=line;}读者close();//返回字符串,用于lucene.net生成索引返回温度;}文本内容已经提取出来了,接下来要根据提取的内容建立索引复制代码代码如下:受保护的void Button2_Click(对象发送者,事件参数e) { //判断存放文本的文件夹是否存在if(!系统。存在(文件目录)){响应编写(' scriptalert('指定的目录不存在');/script ');返回;} //读取文件夹内容目录信息=新目录信息(文件目录);文件信息[]文件=目录信息. GetFiles('* .*');//文件夹判空如果(文件计数()==0) {响应.写入('脚本警告('文件目录下没有文件');/script ');返回;} //判断存放索引的文件夹是否存在,不存在创建if(!系统。存在(索引目录)){系统IO。目录。创建目录(索引目录);} //创建索引索引编写器编写器=新索引编写器(FSDirectory .打开(新目录信息(索引目录)),分析器,真,索引编写器maxfield长度。LIMITED);for(int I=0;我归档了count();I){ string str=' ';文件信息文件信息=文件[一];//判断文件格式,为以后其他文件格式做准备if (fileInfo .全名。结束开关(' .txt') ||文件信息.全名。结束开关(' .XML '){//获取文本str=FileReaderAll(文件信息);} Lucene .文档文档=新Lucene .净。文件。文档();医生。添加(新Lucene .Net。文档.字段('文件名',文件信息).名字,露西. Net。文档.字段.存储.是,Lucene .净。文件。字段。索引。分析过的));//根据文本生成索引医生。添加(新Lucene .Net。文档.字段('内容',字符串,Lucene .Net。文档.字段.存储.是,Lucene .净。文件。字段。索引。分析过的));医生。添加(新Lucene .Net。文档。字段('路径,文件信息。全名,露西. Net。文档.字段.存储.是,Lucene .文档字段索引号);//添加生成的索引作家。添加文档(文件);作家优化();}作家dispose();回应编写(' scriptalert('索引创建成功');/script ');}3.索引创建完了,接下来就是搜索,搜索只要按照固定的格式书写不会出现错误。
复制代码代码如下:受保护的void Button1_Click(对象发送者,EventArgs e) { //获取关键字线关键字=文本框1 .文字。trim();int num=10/关键字判空如果(字符串IsNullOrEmpty(关键字)){回应.Write('scriptalert('请输入要查找的关键字');/script ');返回;} IndexReader=Nullindexsearcher搜索器=null请尝试{ reader=IndexReader .打开(FSDirectory .打开(新目录信息(索引目录))、true);搜索器=新索引搜索器(阅读器);//创建查询perfieldalyzer包装=新的perfieldalyzer包装器(分析器);包装纸. AddAnalyzer('FileName ',analyzer);包装纸。添加分析器("路径",分析器);包装纸. AddAnalyzer('Content ',analyzer);字符串[]字段={ '文件名','路径','内容' };QueryParser解析器=新的多功能打印机(Lucene .Net。Util.Version.LUCENE_30,字段,包装器);//根据关键字查询查询查询=解析器解析(关键字);topcoredoccollector=topcoredoccollector .Create(num,true);搜索者。搜索(查询、收集器);//这里会根据权重排名查询顺序var命中=收集器TopDocs().记分卡;int numTotalHits=收集器TotalHits//以后就可以对获取到的收藏者数据进行操作for(int I=0;我击中了count();I){ var hit=hits[I];露西。文档=搜索者文档(点击. doc);露西。字段文件名字段=文档GetField(' FIlename ');露西。字段路径字段=文档GetField('路径');露西。字段内容字段=文档GetField(' Content ');//在页面循环输出表格可移植的.追加(' tr ');可移植的.追加(“td”文件名称字段.string VaLue '/TD ');可移植的.追加('/tr ');可移植的.追加(' tr ');可移植的.追加(' td' pathField).string VaLue '/TD ');可移植的.追加('/tr ');可移植的.追加(' tr ');可移植的.追加(' td' contentField).StringValue。子串(0,300)'/TD ');可移植的.追加('/tr ');} }最后{ if(搜索器!=null)搜索器dispose();如果(读者!=null)读取器dispose();} }现在整个lucene.net搜索全文的过程就建立完了,现在可以搜索文本文件(文本文件)格式的文件,搜索其他格式的文件在以后添加,主要核心思想就是提取各个不同格式文件的文本内容。显示效果如下
在以后的博客文章中继续接受其他格式文档的搜索。
版权声明:基于ASP.NET的lucene.net全文搜索实施步骤是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。