ElasticSearch是一个高扩展的分布式全文搜索引擎,基于Lucene作为核心实现所有索引和搜索的功能。
使用场景:
(1)搜索领域:如维基百科、谷歌,全文检索等。
(2)网站具体内容:访问统计、文章点赞、留言评论等。
(3)用户行为分析:记录员工行为数据、消费趋势、员工群体进行定制推广等。
(4)数据分析:访问日志数据分析等。
基本概念
Elasticsearch面向文档,类比传统数据库,例如MySQL:
MySQL -> Databases -> Tables -> Rows -> Columns
Elasticsearch -> Indices -> Types -> Documents -> Fields
Elasticsearch集群可以包含多个索引indices,每一个索引可以包含多个类型type,每一个类型包含多个文档documents,然后每个文档包含多个字段fields。
索引
在ES中,索引是一个大型的相同属性的文档集合。ES把索引划分多个分片,每个分片在集群中不同服务器之间迁移。
文档
文档是索引和搜索数据的最小数据单位。一个文档同时包含字段和对应的值,每个文档由多个字段构成,具有层次性,可以文档中包含文档。
类型
类型是文档的容器,类型中对于字段的定义叫做映射(mapping),所有类型下的文档被储存在同一个索引下,但是类型的映射(mapping)会告诉Elasticsearch不同的文档如何被索引。
映射
类似于静态语言中的数据类型,一个number类型的mapping字段只能存储number类型的数据。
倒排索引
正向索引是以文档对象的唯一id作为索引,以文档内容作为记录的结构。而倒排索引指的是将文档内容中的单词作为索引,将包含该词的文档id作为记录的结构。
例如有如下三句话:
(1)博客真好用
(2)博客系统开发的不错
(3)博客网站开发很难
进行分词后如下所示:
如果要搜寻带系统二字的文章,相较于查找所有的数据而言,只需要看标签这一栏,就可以获取文章id了。