文章背景
之前在公司写了一个ppt,着重介绍ES的基本使用。现在半年过去,感觉和ES的距离越来越远。遂想写几篇博客,来记录自己使用ES的心得。
本篇主要参考之前写的ppt,只是个入门。
Elasticsearch的基础概念
Elasticsearch 是一个基于Lucene的搜索服务器。
功能:
- 分布式实时文件存储,并将每一个字段都编入索引,使其可以被搜索。
- 实时分析的分布式搜索引擎。
- 可以扩展到上百台服务器,处理PB级别的结构化或非结构化数据。
Cluster:集群
ES可以作为一个独立的单个搜索服务器。不过,为了处理大型数据集,实现容错和高可用性,ES可以运行在许多互相合作的服务器上。这些服务器的集合称为集群。
Node:节点
形成集群的每个服务器称为节点。
Shard:分片
当有大量的文档时,由于内存的限制、磁盘处理能力不足、无法足够快的响应客户端的请求等,一个节点可能不够。这种情况下,数据可以分为较小的分片。每个分片放到不同的服务器上。 当你查询的索引分布在多个分片上时,ES会把查询发送给每个相关的分片,并将结果组合在一起,而应用程序并不知道分片的存在。即:这个过程对用户来说是透明的。
Index
Elastic 数据管理的顶层单位就叫做 Index(索引)。它是单个数据库的同义词。每个 Index (即数据库)的名字必须是小写。
下面的命令可以查看当前节点的所有 Index
GET _cat/indices
Document
Index 里面单条的记录称为 Document(文档)。许多条 Document 构成了一个 Index。
Type
Document 可以分组,比如weather这个 Index 里面,可以按城市分组(北京和上海),也可以按气候分组(晴天和雨天)。这种分组就叫做 Type,它是虚拟的逻辑分组,用来过滤 Document。
不同的 Type 应该有相似的结构(schema),性质完全不同的数据应该存成两个 Index
ES集群的健康状况
查看集群健康状况: GET _cluster/health
red :部分的分片可用,表明分片有一部分损坏。
Yellow:基本的分片可用,但是备份不可用(或者是没有备份)
green :最健康得状态,说明所有的分片包括备份都可用
ES的常用API介绍
ES 也可以增上改查,下面主要介绍ES的常用操作,使用的工具是Kibana
新增index的mapping
PUT /wang_test
删除index
DELETE /wang_test
新增/修改doc
备注:图例这种方法,如果es中没有id为1的doc,es会新增一条数据。如果es中已经有id为1的doc,会直接把id为1的doc给覆盖,原来内容换成我们发送请求的内容,没有值的为空。es还有内置脚本,可以让我们单独修改某个字段。给出官网链接:https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-scripting-using.html
查询doc
id查询
GET { index } / {type} / {id}
Term查询
term是代表完全匹配,也就是精确查询,搜索前不会再对搜索词进行分词
Match查询
match查询会先对搜索词进行分词,分词完毕后再逐个对分词结果进行匹配,因此相比于term的精确搜索,match是分词匹配搜索
当我们搜索中国杭州,搜索词会先分词为中国和杭州,只要文档中包含搜索和杭州任意一个词,都会被搜索到
Filter查询
它不会去计算任何分值,也不会关心返回的排序问题,因此效率会高一点。
Filter查询不会去计算任何分值,也不会关心返回的排序问题,所以,相对比query查询,因此效率会高一点。
( query 查询通常会注意文档匹不匹配这个查询,它的相关度高么)这个相关度,是依据每个doc的分数。当我们往es入数据时, lucene会对数据进行倒排索引,并且给每个doc打分
Wildcard查询
模糊查询,相当与mysql的like。对于被搜索的内容,前后需要加 * 。
range查询
范围查询
Should查询
相当于mysql的or查询
桶查询
相当于mysql的group by 查询
Nest嵌套结构查询
nest嵌套结构的设计,能够让我们存储一个对象,这个对象可以是一个json,也可以是一个数组。