文章目录
一、elasticsearch介绍
1、背景
在订单管理系统中,订单查询的调用量都非常大,如果直接查询数据库,那数据库的压力可想而知,而且有时需要执行一些复杂的查询,sql 并不能够友好的支持,需要查询很多张表。再比如用户手误输入的关键词错了或存在错别字,那使用 sql 是无法搜索到。所以打算使用 Elasticsearch 来承载订单查询的主要压力。
总的来说,使用 elasticsearch,以下简称es 的几个原因如下
-
关系型数据库在进行模糊(%关键字%)搜索的时候,会全表扫描,查询非常慢
-
关系型数据库在关键字搜索时,并不支持全文分词搜索,比如用户本打算搜索:公众号-臻大虾,却手误:公号-臻大虾,es 可以根据分词的结果搜索出想要的结果。
-
在数据分析、日志分析上用到 es
2、es 基本概念
Elasticsearch 是一个分布式、RESTful 风格的搜索和数据分析引擎,适用于包括文本、数字、地理空间、结构化和非结构化数据等在内的所有类型的数据。Elasticsearch 在 Apache Lucene 的基础上开发而成,由 Elasticsearch N.V.(即现在的 Elastic)于 2010 年首次发布。
Elasticsearch 是文件存储,Elasticsearch 是面向文档型数据库,一条数据在这里就是一个文档,用 JSON 作为文档序列化的格式,比如下面这条用户数据:
{
"name":"臻大虾",
"sex":0,
"age":24
}
3、es 优势
-
分布式:横向可扩展性,增加服务器可直接配置在集群中
-
高可用:提供了复制功能,具有容错机制,能自动发现新的或失败的节点,重组和重新平衡节点数据
-
实时性:数据进入 es,可达到近实时搜索
-
Restful api:json 格式的 RESTful 风格
-
全文检索:基于 lucene 的强大的全文检索能力
4、使用场景
全文检索
当我们使用百度搜索、谷歌搜索时,输入关键字,就能搜索到最相关的文章,这就是利用了 es 强大的全文检索的能力。
用户行为
平时淘宝买东西时,你是否发现推荐的商品跟你最近搜索的关键词很享受,这就是通过收集用户的行为日志,分析并建立用户模型,保存在 es 中,并利用 es 强大的深入搜索和聚合的能力,可以更好的分析和展示用户的行为数据。例如推荐系统,就是利用用户模型的用户数据,对用户数据交叉查询,分析出用户细粒度的喜好。
监控系统
利用 es 高性能查询的特性,收集系统的监控数据,近实时展现监控数据,同时也方便用户对监控数据进行关键字排查。
日志系统
常用的方案是 ELK(elasticsearch+logstash+kibana),利用 logstash 去收集 logback 的日志信息,再通过 es 做存储,最后可以再 kibana 去利用 es api 查看和分析日志的相关信息。
5、es 的核心概念
索引(index)
索引是 es 最大的数据单元,类似于关系型数据库中的库,是多个相似文档的集合。每个索引有一个或多个分片,每个分片有多个副片。
文档(document)
一条数据就是一个文档,类似于数据库表中的一条记录,比如:
{
"name":"臻大虾",
"sex":0,
"age":24
}
字段(field)
文档的属性,类似表中的字段,比如如下 json 的健:name
{
"name":"臻大虾"
}
映射(mapping)
映射是对文档中每个字段类型进行定义,类似表结构,包含数据类型,长度之类的,比如:
"mappings": {
"properties": {
"name": {
"type": "text"
},
"age": {
"type": "long"
}
}
}
分片(Shards)
在创建索引时,可以设置主分片个数和副本个数,类似数据库的分表,将单个索引文件分成多份存储,当请求过来时,通过路由计算找到主分片(hash(字段,比如 id)%分主片数量&#