全文检索的原理:查询速度快,精准度高,可以根据相关度进行排序。它的原理是:先把内容分词,分词之后建索引。
Lucene是apache下的一个开放源代码的全文检索引擎工具包。
提供了完整的查询引擎和索引引擎,部分文本分析引擎。Lucene的目的是为了软件开发人员提供一个简单易用的工具包,以方便在目标系统中实现全文检索的功能。
全部都建索引的话看不出效果来。先是根据英文的文档建立索引,因为它这里涉及到一个中文分析器的问题。分开两部分来看,一部分是创建索引,一部分是查询索引。
使用我们的文件流就可以读取这些原始文档,
1.获得文档
磁盘上的文件,直接使用文件流来读取。搜索引擎搜索的这些内容都在互联网上,互联网的网站非常多,每个网站的网页也非常多,内容也非常多,如何获得这些文档啊?在讲WebService的时候讲过HttpClient,HttpClient可以做爬虫程序,这个爬虫程序就是来抓取互联网的这些网页的,HttpClient可以模拟浏览器,浏览器访问一个服务器返回的是html,我根据这个html再去分析里面的a标签,就可以链到其他的网页了。如此我可以进行递归,先是访问一个网站,比如说先访问新浪网首页,新浪网首页给我返回一个html,这个html我把其中的a标签解析出来,a标签对应一个链接,把把这个链接扩散到我的队列里面,我再用httpClient再去访问我这个链接,又返回一个html。如此就可以通过一个点扩展到整个互联网。像网易或者是新浪它还有很多链接链接到其他的网站上,其他网站还有别的链接链接到其他网站上。这样我就可以通过一点来搜索整个互联网。这样就相当于挨个去爬取这些网站的网页啊。这就是爬虫程序的原理。
搜索引擎如何获得原始文档:
Solr是基于Lucene的全文检索的服务器,支持把数据从关系型数据库中导到我们的索引数据库中。
jsoup和解析XML的dom4j差不多,jsoup是解析html文档的,html只是一个文本文档而已,你还要使用jsoup去解析它。
在Lucene里面,每一个文本文档对应一个Document,你可以理解为数据库中的一条记录,我们每一个文档可以看做是数据库表中的一条记录。
2、创建文档对象。
文档不是白创建的,文档里面包含一个一个的域,这个域就是Field,学数据库也学过Field,不过数据库的Field是字段。在全文检索中Field也可以理解为一个字段。一个Document对应多个字段Field,一个文档它是一个记录。最直观的就是:一个文件的名称它是一个域了,一个文件的内容它也是一个域了,两个域了是吧。文件的大小也是一个指标,我们也把它看做是一个域。还有一个文件的路径。路径也是其中一个指标,描述了我们的文档,还有其他的你想放什么就放什么。这就是我们文档中的域。这个文档中的域,数据库中的字段不能重复,重复就会报错,表就建立不了了。在全文检索的文档中,可以有多个相同的域,它不管你,你可以重名,甚至内容相同也没有关系。
一个文档相当于数据库中的一条记录,一个文档中有多个域(Field),域类似于数据库的字段。注意:在Lucene的文档对象中可以有同名域。