电子商务网站建设实训报告主要内容,济南网站制作厂家,手游平台,爱站工具的功能文章目录课程计划什么是全文检索数据分类结构化数据搜索非结构化数据查询方法如何实现全文检索全文检索的应用场景Lucene实现全文检索的流程索引和搜索流程图创建索引获得原始文档创建文档对象分析文档创建索引查询索引用户查询接口创建查询执行查询渲染结果全文检索技术Lucene…
文章目录课程计划什么是全文检索数据分类结构化数据搜索非结构化数据查询方法如何实现全文检索全文检索的应用场景Lucene实现全文检索的流程索引和搜索流程图创建索引获得原始文档创建文档对象分析文档创建索引查询索引用户查询接口创建查询执行查询渲染结果全文检索技术Lucene
课程计划 什么是全文检索如何实现全文检索 Lucene实现全文检索的流程 a. 创建索引 b. 查询索引 配置开发环境 入门程序 分析器的分析过程 a. 测试分析器的分词效果 b. 第三方中文分析器 索引库维护 a. 添加文档 b. 删除文档 c. 修改文档 索引库查询 a. 使用Query子类查询 b. 使用QueryParser查询
什么是全文检索
数据分类
我们生活中的数据总体分为两种结构化数据和非结构化数据。
结构化数据指具有固定格式或有限长度的数据如数据库元数据等。
非结构化数据指不定长或无固定格式的数据如邮件word文档等磁盘上的文件
结构化数据搜索
常见的结构化数据也就是数据库中的数据。在数据库中搜索很容易实现通常都是使用sql语句进行查询而且能很快的得到查询结果。
为什么数据库搜索很容易
因为数据库中的数据存储是有规律的有行有列而且数据格式、数据长度都是固定的。
非结构化数据查询方法 顺序扫描法(Serial Scanning) 所谓顺序扫描比如要找内容包含某一个字符串的文件就是一个文档一个文档的看对于每一个文档从头看到尾如果此文档包含此字符串则此文档为我们要找的文件接着看下一个文件直到扫描完所有的文件。如利用windows的搜索也可以搜索文件内容只是相当的慢。 全文检索(Full-text Search) 将非结构化数据中的一部分信息提取出来重新组织使其变得有一定结构然后对此有一定结构的数据进行搜索从而达到搜索相对较快的目的。这部分从非结构化数据中提取出的然后重新组织的信息我们称之索引。
例如字典。字典的拼音表和部首检字表就相当于字典的索引对每一个字的解释是非结构化的如果字典没有音节表和部首检字表在茫茫辞海中找一个字只能顺序扫描。然而字的某些信息可以提取出来进行结构化处理比如读音就比较结构化分声母和韵母分别只有几种可以一一列举于是将读音拿出来按一定的顺序排列每一项读音都指向此字的详细解释的页数。我们搜索时按结构化的拼音搜到读音然后按其指向的页数便可找到我们的非结构化数据------也即对字的解释。
这种先建立索引再对索引进行搜索的过程就叫全文检索(Full-text Search)。
虽然创建索引的过程也是非常耗时的但是索引一旦创建就可以多次使用全文检索主要处理的是查询所以耗时间创建索引是值得的。
如何实现全文检索
可以使用Lucene实现全文检索。Lucene是apache下的一个开放源代码的全文检索引擎工具包。提供了完整的查询引擎和索引引擎部分文本分析引擎。Lucene的目的是为软件开发人员提供一个简单易用的工具包以方便的在目标系统中实现全文检索的功能。
全文检索的应用场景
对于数据量大、数据结构不固定的数据可采用全文检索方式搜索比如百度、Google等搜索引擎、论坛站内搜索、电商网站站内搜索等。
Lucene实现全文检索的流程
索引和搜索流程图 1、绿色表示索引过程对要搜索的原始内容进行索引构建一个索引库索引过程包括
确定原始内容即要搜索的内容采集文档创建文档分析文档索引文档
2、红色表示搜索过程从索引库中搜索内容搜索过程包括
用户通过搜索界面创建查询执行搜索从索引库搜索渲染搜索结果
创建索引
对文档索引的过程将用户要搜索的文档内容进行索引索引存储在索引库index中。
这里我们要搜索的文档是磁盘上的文本文件根据案例描述凡是文件名或文件内容包括关键字的文件都要找出来这里要对文件名和文件内容创建索引。
获得原始文档
原始文档是指要索引和搜索的内容。原始内容包括互联网上的网页、数据库中的数据、磁盘上的文件等。
本案例中的原始内容就是磁盘上的文件如下图 从互联网上、数据库、文件系统中等获取需要搜索的原始信息这个过程就是信息采集信息采集的目的是为了对原始内容进行索引。
在Internet上采集信息的软件通常称为爬虫或蜘蛛也称为网络机器人爬虫访问互联网上的每一个网页将获取到的网页内容存储起来。
本案例我们要获取磁盘上文件的内容可以通过文件流来读取文本文件的内容对于pdf、doc、xls等文件可通过第三方提供的解析工具读取文件内容比如Apache POI读取doc和xls的文件内容。
创建文档对象
获取原始内容的目的是为了索引在索引前需要将原始内容创建成文档Document文档中包括一个一个的域Field域中存储内容。
这里我们可以将磁盘上的一个文件当成一个documentDocument中包括一些Fieldfile_name文件名称、file_path文件路径、file_size文件大小、file_content文件内容如下图
注意每个Document可以有多个Field不同的Document可以有不同的Field同一个Document可以有相同的Field域名和域值都相同
每个文档都有一个唯一的编号就是文档id。
分析文档
将原始内容创建为包含域Field的文档document需要再对域中的内容进行分析分析的过程是经过对原始文档提取单词、将字母转为小写、去除标点符号、去除停用词等过程生成最终的语汇单元可以将语汇单元理解为一个一个的单词。
比如下边的文档经过分析如下
原文档内容
Lucene is a Java full-text search engine. Lucene is not a complete
application, but rather a code library and API that can easily be used
to add search capabilities to applications.
分析后得到的语汇单元
lucene、java、full、search、engine。。。。
每个单词叫做一个Term不同的域中拆分出来的相同的单词是不同的term。term中包含两部分一部分是文档的域名另一部分是单词的内容。
例如文件名中包含apache和文件内容中包含的apache是不同的term。
创建索引
对所有文档分析得出的语汇单元进行索引索引的目的是为了搜索最终要实现只搜索被索引的语汇单元从而找到Document文档。
注意创建索引是对语汇单元索引通过词语找文档这种索引的结构叫倒排索引结构。
传统方法是根据文件找到该文件的内容在文件内容中匹配搜索关键字这种方法是顺序扫描方法数据量大、搜索慢。
倒排索引结构是根据内容词语找文档如下图 倒排索引结构也叫反向索引结构包括索引和文档两部分索引即词汇表它的规模较小而文档集合较大。
查询索引
查询索引也是搜索的过程。搜索就是用户输入关键字从索引index中进行搜索的过程。根据关键字搜索索引根据索引找到对应的文档从而找到要搜索的内容这里指磁盘上的文件。
用户查询接口
全文检索系统提供用户搜索的界面供用户提交搜索的关键字搜索完成展示搜索结果。
比如 Lucene不提供制作用户搜索界面的功能需要根据自己的需求开发搜索界面。
创建查询
用户输入查询关键字执行搜索之前需要先构建一个查询对象查询对象中可以指定查询要搜索的Field文档域、查询关键字等查询对象会生成具体的查询语法
例如
语法 fileName:lucene表示要搜索Field域的内容为lucene的文档
执行查询
搜索索引过程
根据查询语法在倒排索引词典表中分别找出对应搜索词的索引从而找到索引所链接的文档链表。
比如搜索语法为fileName:lucene表示搜索出fileName域中包含Lucene的文档。
搜索过程就是在索引上查找域为fileName并且关键字为Lucene的term并根据term找到文档id列表。 渲染结果
以一个友好的界面将查询结果展示给用户用户根据搜索结果找自己想要的信息为了帮助用户很快找到自己的结果提供了很多展示的效果比如搜索结果中将关键字高亮显示百度提供的快照等。