概述
一款非常强大的开源搜索引擎,能够实现在海量数据中快速检索到满足条件的数据,同时还可以实现分页、高亮显示等功能.
ELK技术栈
Elasticsearch
存储、搜索、分析数据
Kibana
数据可视化
提供了图形化界面,可以操作ES
Logstash、Beats
数据抓取
相关产品
lucene
是Apache的开源搜索引擎类库,提供了搜索引擎的核心API,由Java语言开发
ES底层是基于lucene来实现的
官网 https://lucene.apache.org/
Solr
ES流行之前最火的开源搜索引擎
底层也是lucene
ES在搜索实时数据的性能要强于Solr
倒排索引
正向索引
先通过文件名找到具体的文件,再获取文件中的内容过程
mysql的查询功能就是正向索引的思想
先根据ID查询记录,再从记录中获取相关字段的数据
倒排索引
1、概述
从文件的内容查找,得到包含这些内容的文件列表,再得到文件对应的信息,如文件名、作者、文件大小、创建时间等
2、过程
1、将文档的内容通过算法进行分词,得到一个词条列表
2、将词条列表当作key,包含该词条的文档id列表作为值,形成一张表原始文档词条表
3、词条是唯一的,所以给词条创建索引,提高搜索效率
4、通过词条查询,得到文档ID,再通过文档ID查询到具体的文档
3、总结
把文档内容进行分词,得到一个词条表【词条:文档ID列表】,给词条创建索引。把要搜索的内容进行分词,根据分词后的结果去词条表中根据词条进行匹配,得到文档ID列表,再通过文档ID返回具体的文档信息
mysql与elasticsearch的概念对比
MySQL | Elasticsearch | 说明 |
---|---|---|
Table | Index | 索引(index),就是文档的集合,类似数据库的表(table) |
Row | Document | 文档(Document),就是一条条的数据,类似数据库中的行(Row),文档都是JSON格式 |
Column | Field | 字段(Field),就是JSON文档中的字段,类似数据库中的列(Column) |
Schema | Mapping | Mapping(映射)是索引中文档的约束,例如字段类型约束。类似数据库的表结构(Schema) |
SQL | DSL | DSL是elasticsearch提供的JSON风格的请求语句,用来操作elasticsearch,实现CRUD |
分词器的作用
-
创建倒排索引时对文档分词
-
用户搜索时,对输入的内容分词
IK分词器模式
-
ik_smart:智能切分,粗粒度
-
ik_max_word:最细切分,细粒度
IK分词器拓展词条、停用词条
-
利用config目录的IkAnalyzer.cfg.xml文件添加拓展词典和停用词典
-
在词典中添加拓展词条或者停用词条
mapping映射属性
mapping是对索引库中文档的约束,常见的mapping属性包括:
-
type:字段数据类型,常见的简单类型有:
-
字符串:text(可分词的文本)、keyword(精确值,例如:品牌、国家、ip地址)
-
数值:long、integer、short、byte、double、float、
-
布尔:boolean
-
日期:date
-
对象:object
-
-
index:是否创建索引,默认为true
-
analyzer:使用哪种分词器
-
properties:该字段的子字段
索引库操作
-
创建索引库:PUT /索引库名
-
查询索引库:GET /索引库名
-
删除索引库:DELETE /索引库名
-
添加字段:PUT /索引库名/_mapping
文档操作
-
创建文档:POST /{索引库名}/_doc/文档id { json文档 }
-
查询文档:GET /{索引库名}/_doc/文档id
-
删除文档:DELETE /{索引库名}/_doc/文档id
-
修改文档:
-
全量修改:PUT /{索引库名}/_doc/文档id { json文档 }
-
增量修改:POST /{索引库名}/_update/文档id { "doc": {字段}}
-