基于Lucene的搜索引擎的设计与实现
基于Lucene的搜索引擎的设计与实现
我们处在一个大数据的时代,伴随着网络信息资源的庞大,人们越来越多地注重怎样才能快速有效地从海量的网络信息中,检索出自己需要的、潜在的、有价值的信息,从而可以有效地在日常工作和生活中发挥作用。因为搜索引擎这一技术很好的解决了用户搜索网上大量信息的难题,所以在当今的社会,无论是发展迅猛的计算机行业,还是作为后起之秀的信息产业界,都把Web搜索引擎的技术作为了争相探讨与专研的方向。
搜索引擎的定义就是指按照既定的策略与方法,采取相关的计算机程序,通过在互联网中进行寻信息,并显示信息,最后把到的信息进行整理和筛选,为搜索引擎的使用者提供检索信息的服务,终极目标是为了提供给使用者,他所搜索信息相关的资料的计算机系统。搜索引擎的种类繁多,既可以进行全文的索引,还可以进行目录的索引,不仅有集合式的搜索引擎,还有垂直搜索的引擎以及元搜索引擎。除此之外,还有门户搜索引擎和免费链接列表等等
经过对搜索引擎的研究同时与Lucene自身的特性相结合,将本次设计所需要实现的功能阐述如下:
- 支持桌面文件搜索,格式包括txt、doc、xls和ppt;
- 支持分词查询
- 支持全文搜索
- 能够高亮显示搜索关键字
- 显示查询所用的时间
- 显示搜索历史、过滤关键字
分词查询与全文搜索这两项功能,我们都可以利用Lucene本身自带的库加上相关算法就可以完成设计了,为了使得关键字的高亮度这一问题得到解决,显然,我们需要利用Highlighter的辅助,通过数据库持久化保存数据。
搜索引擎的详细软件内部构成和具体工作流程说明如下:
搜索引擎的工作原理:当我们在一个表单中输入要搜索的内容时,搜索引擎就会根据我们输入的内容在数据库中进行搜索,首先他会匹配各个网页中的头部信息中的关键字,如果这个网站中有这个关键字的话,就会匹配出来;如果没有的话,搜索引擎就会自动过滤掉。简单直白的说,搜索引擎的工作原理就是对已存在的一个大型数据库内的信息资源进行智能化的筛选过程,并将有效的结果反馈给用户。
因为我所选择的搜索引擎是基于Lucene的,所以需要利用Lucene的一些jar包,这样才能借助Lucene完成我们自己想要的搜索功能,并且为了实现分词,我们还需要引用分词组件的相关类库,具体的引用类库如图5-1所示:
由于Lucene只能替文本这一类型的数据组建索引,所以为了进行其他类型的数据进行检索,只能把其他的格式的数据用文本类型的替换,这样就可以进行索引、搜索了。如果需要对HTML文档进行索引的话,你就首先需要利用文本格式把 HTML文档替换,随后才可以将转化的结果输入 Lucene进行索引与检索,接着就会创建一份索引文件,我们需要把它保存到存储器里面,最终通过判断用户在UI界面输入的查询请求,从建立好的索引文件中查。
实现代码:
/**
* 为数据库检索数据创建索引
* @param rs
* @throws Exception
*/ private void createIndex(ResultSet rs) throws Exception { Directory directory = null; IndexWriter indexWriter = null; try { indexFile = new File(searchDir); if(!()) { (); } directory = (indexFile); analyzer = new IKAnalyzer(); indexWriter = new IndexWriter(directory, analyzer, true, IndexWriter.MaxFieldLength.ULIMITED); indexWriter.setMaxBufferedDocs(maxBufferedDocs); Document doc = null; while(()) { doc = new Document(); Field id = new Field(id, String.valueOf(rs.getInt(id)), Field.Store.YES, Field.Index.OT_AALYZED, TermVector.O); // Field title = new Field(title, rs.getString(title) == null ? : rs.getString(title), Field.Store.YES,Field.Index.AALYZED, TermVector.O); Field content = new Field(content, rs.getString(content) == null ? : rs.getString(content), Field.Store.YES,Field.Index.AALYZED, TermVector.O); doc.add(id); doc.add(content); indexWriter.addDocument(doc); } (); (); } catch(Exception e) { e.printStackTrace(); } }
效果图:
具体详细介绍可以参看:
.html
#感谢您对电脑配置推荐网 - 最新i3 i5 i7组装电脑配置单推荐报价格的认可,转载请说明来源于"电脑配置推荐网 - 最新i3 i5 i7组装电脑配置单推荐报价格
推荐阅读
留言与评论(共有 13 条评论) |
本站网友 正确的洗头方法 | 19分钟前 发表 |
rs.getString(content) | |
本站网友 男士沐浴露 | 10分钟前 发表 |
rs.getString(content) | |
本站网友 你的我的 | 20分钟前 发表 |
Field.Index.OT_AALYZED | |
本站网友 郑州最好的男科医院 | 12分钟前 发表 |
rs.getString(content) == null ? | |
本站网友 西交大城市学院 | 29分钟前 发表 |
除此之外,还有门户搜索引擎和免费链接列表等等 经过对搜索引擎的研究同时与Lucene自身的特性相结合,将本次设计所需要实现的功能阐述如下: 支持桌面文件搜索 | |
本站网友 压缩面膜纸怎么用 | 22分钟前 发表 |
因为我所选择的搜索引擎是基于Lucene的 | |
本站网友 speedtree下载 | 26分钟前 发表 |
搜索引擎的详细软件内部构成和具体工作流程说明如下 | |
本站网友 股海伏笔直播 | 10分钟前 发表 |
搜索引擎的定义就是指按照既定的策略与方法,采取相关的计算机程序,通过在互联网中进行寻信息,并显示信息,最后把到的信息进行整理和筛选,为搜索引擎的使用者提供检索信息的服务,终极目标是为了提供给使用者,他所搜索信息相关的资料的计算机系统 | |
本站网友 欧莱雅男士护肤系列 | 0秒前 发表 |
如果需要对HTML文档进行索引的话,你就首先需要利用文本格式把 HTML文档替换,随后才可以将转化的结果输入 Lucene进行索引与检索,接着就会创建一份索引文件,我们需要把它保存到存储器里面,最终通过判断用户在UI界面输入的查询请求,从建立好的索引文件中查 | |
本站网友 城市花园婚纱摄影 | 20分钟前 发表 |
过滤关键字 分词查询与全文搜索这两项功能,我们都可以利用Lucene本身自带的库加上相关算法就可以完成设计了 | |
本站网友 乐视tv吧 | 9分钟前 发表 |
TermVector.O); doc.add(id); doc.add(content); indexWriter.addDocument(doc); } (); (); } catch(Exception e) { e.printStackTrace(); } } 效果图: 具体详细介绍可以参看: .html | |
本站网友 江中牌健胃消食片 | 28分钟前 发表 |
String.valueOf(rs.getInt(id)) |