什么是全文检索 (2)

file

我们要分析其中所有的单词,将单词、文档名建立映射关系。

(对于单词的切分包括了对原始文档提取单词、去除停用词等过程,这个过程被称为分词)

我们分析其中的一篇文档Lucene.txt:

原文档内容:

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。。。。

另一个文档flink.txt加入几个单词:

java flink kakfa

我们也可以得到语汇单元:

java flink kakfa

这样我们就建立了映射关系,lucene、java、full、search在Lucene.txt中,而flink不在Lucene.txt中,但是在flink.txt中。java即在Lucene.txt中,也在flink.txt中。

file

那当我们查找lucene这个词,就在Lucene.txt中,但是查找java时可以获悉其在这两个文件中。

创建索引是对语汇单元索引,通过词语找文档,这种索引的结构就叫做叫倒排索引结构

传统方法是根据文件找到该文件的内容,在文件内容中匹配搜索关键字,这种方法是顺序扫描方法,数据量大、搜索慢。

倒排索引结构是根据内容(词语)找文档,如下图:

file

倒排索引结构也叫反向索引结构,包括索引和文档两部分,索引即词汇表,它的规模较小,而文档集合较大。

有倒排索引,对应肯定,有正向索引。 正向索引其实就是顺序扫描所有文件,这样本身效率是极低的。

查询索引

查询索引也是搜索的过程。搜索就是用户输入关键字,从索引(index)中进行搜索的过程。根据关键字搜索索引,根据索引找到对应的文档,从而找到要搜索的内容(这里指磁盘上的文件)。

我们这里就是通过查询索引表,找到文档所在的位置,就完成了查询,但其他的场景可以灵活的把查询出来的结果展示出去,比如我们的百度搜索时,为我们展示的是相关网页。

file

开发一个自己的全文检索

手动去开发建立索引和查询索引的功能需要大量的工作,好在lucene已经帮我们完成了大量的工作,只需要调用java api就可以完成相关工作。

但是Lucene的API过于底层,并不简单易用,而且缺乏企业级的管理工具对其进行监控管理,于是企业级的全文检索引擎就应运而生了,目前最流行的两个就是:Solr和ES。他们都是建立在Lucene之上的。

Solr

Solr是Apache Lucene项目的开源企业搜索平台。Solr是高度可扩展的,并提供了分布式搜索和索引复制。

file

Solr由Java开发,运行在Servlet容器中,是一个独立的全文搜索服务器。并具有强大的API和外部配置功能,使得无需编码,便可对其调整以适应多种类型应用。

2010年Apache Lucene与Apache Solr项目合并,所以Lucene/Solr成为了Apache一个项目。

由此可见,Solr的优势就是:

有一个成熟的开发者社区;本省比较稳定;支持多种格式的索引。

但是由于底层机制的限制,Solr的缺点也很明显:

建立索引时,搜索效率下降;实时索引搜索效率不高。

ES

ES也就是Elasticsearch,是一个实时的分布式搜索和分析引擎,它可以用于全文搜索,结构化搜索以及分析。

file

由于Lucene过于复杂,不方便使用。Elasticsearch使用Lucene作为内部引擎,但是Elasticsearch做搜索引擎时,只需要使用同一的API就可以,而不需要了解复杂的Lucene原理。

而且Elasticsearch不仅仅可以做全文搜索功能,在企业中可以作为:

分布式实时文件存储;

实时分析的分布式搜索引擎;

Elasticsearch的Restful API友好而且简单,特别容易上手。

目前包括维基百科、Stackoverflow、Github等都是用Elasticsearch作为其搜索引擎。

ES简单体验

这里我们简单使用一个ES完成一个全文检索功能。

1、下载

首先在官网下载 ,官网地址:https://www.elastic.co/products/elasticsearch 

下载地址如下:https://www.elastic.co/cn/downloads/elasticsearch

选择自己系统的我们这选择WIndows版本。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zwjgpp.html