探索ElasticSearch-Lucene入门(六)

前言

也算是使用了ElasticSearch一段时间了,可是仍是没有仔细看过Lucene相关的内容。今天来系统小结下。java

这篇文章主要谈论Lucene的基本架构,倒排索引分词器,如何使用查询语法查询Lucene以及LuceneElasticSearch的区别和联系。数组

Lucene

基本架构

  • 文档:索引和搜索的主要的数据载体,包含多个字段。
  • 字段:多个字段组成一个文档。包含具体的信息。
  • 词项:由term翻译而来。能够简单理解为具体的信息中拆分出来的一个个单词。
  • 词条:由token翻译而来。词项在文本中的一次出现。不只包含词项的内容,并且包含开始的位置,结束的位置等信息。
  • 段:由Segment翻译而来。每一个段只会被建立一次,段一但被建立了以后就不会被修改。因此,会存在段合并的过程,减小段的数量,并且搜索的性能也会提高。段中数据的删除只会在段合并的过程当中进行。

term和token的区别是什么? 举个例子,有下面一段文本。My brother love ElasticSearch.I love ElasticSearch,too. token为My,brother,love,ElasticSearch,I,love,ElasticSearch,too term为My,brother,love,ElasticSearch,I,toobash

倒排索引

简单来讲,倒排索引最主要的一个特色是面向term创建索引的,而不是面向文档创建索引的。 举个例子,假若有下面这几个文档。架构

doc1:I love ElasticSearch
doc2:I love Java
doc3:I hate sleeping
复制代码

若是使用传统面向文档的方式创建索引,那么当使用love进行搜索的时候,须要先遍历doc1中全部的字段,再遍历doc2中全部的字段,依次遍历,直到最后一个doc,才可以肯定存在love这个单词的文档是doc1,doc2elasticsearch

若是使用的是倒排索引呢?分布式

那么会组成如下的倒排索引。性能

Term Doc
I doc1,doc2,doc3
love doc1,doc2
elasticsearch doc1
java doc2
sleeping doc3

那么,当使用love来搜索的时候,最多只须要遍历一遍就可以查询到结果。直接返回doc1,doc2。优点在于只要匹配到了term,就能够直接返回。无需像传统索引同样遍历全部的文档。spa

分词器

一段文本在Lucene中被转化为一个一个可用于搜索的词项的过程叫作分析。有时候也会叫作分词。在Lucene中是使用分词器来进行分析(分词)的行为的。翻译

举个例子code

I love ElasticSearch  ->  [I,love,elasticsearch]
复制代码

这里就是原来的文本被分词器转换为多个词项。

文本分析由分析器执行,而分析器又由字符过滤器,分词器和字符映射器组成。

那么这三个组成又分别有什么做用呢?

举个例子。存在下面这样文本。

I love! ElasticSearch.
复制代码

通过了字符过滤器以后

I love! ElasticSearch.   -> I lvoe ElasticSearch
复制代码

字符过滤器是去掉在本来文本中存在的一些不合适的字符,好比.等。过滤器将本来存在多种不合适的字符流转化为合适的字符流。

接着,会通过分词器。

I love ElasticSearch -> [I,love,ElasticSearch]
复制代码

分词器会原来的字符流转化为多个词项的数组。最终能够经过这些词项搜索。

[I,love,ElasticSearch] -> [I,love,elasticsearch]
复制代码

最后,字符映射器会将最原始的词项统一格式,好比都转化为小写的词项。这个被转化后的词项才会被Lucene存放。

固然,这是默认的标准分析器采用的规则。不一样的分析器可使用不一样的字符过滤器,分词器和字符映射器来完成分析的工做。

查询语法

由查询内容和操做符组合而成。

Lucene与ElasticSearch的联系

首先,ElasticSearch正是基于Lucene开发的。相对于Lucene拥有轻量级,独立性的特色来讲。ElasticSearch具备的特色就是分布式,可扩展,高可用的特色。

关于写做

之后这里天天都会写一篇文章,题材不限,内容不限,字数不限。尽可能把本身天天的思考都放入其中。

若是这篇文章给你带来了一些帮助,能够动动手指点个赞,顺便关注一波就更好了。

若是上面都没有,那么写下读完以后最想说的话?有效的反馈和你的鼓励是对我最大的帮助。

另外打算把博客给从新捡起来了。欢迎你们来访问吃西瓜

我是shane。今天是2019年9月6日。百天写做计划的第四十四天,44/100。

相关文章
相关标签/搜索