Elasticsearch 介绍
- Elasticsearch 是一个高度可扩展且开源的全文检索和分析引擎。可以快速且近实时地存储,检索以及分析海量数据。
Elasticsearch 应用场景:
-
提供搜索和自动完成功能。
-
ELK(Elasticsearch/Logstash/Kibana ),Logstash收集数据或日志,Elasticsearch聚合统计分析数据,Kibana可视化。
为什么不用Mysql?
- 为什么不用Mysql?
解答:Mysql在做模糊查询时,使用左模糊不会走索引,会遍历全表,速度比较慢。
Mysql数据库并不支持分词。
- Elasticsearch是基于倒排索引的。
一、概念
- Index(索引) :
Elastic 数据管理的顶层单位就叫做 Index(索引)。类似单个数据库。
- Document(文档):
Index 里面单条的记录称为 Document(文档)。许多条 Document 构成了一个 Index。
相当于关系型数据库中的表中的一行记录。
Document 使用 JSON 格式表示。
- Type(类型):
Type其相当于关系型数据库中的表。
Document 可以分组。比如weather这个Index里面,可以按城市分组(北京和上海),也可以按气候分组。
这种分组就叫做 Type,它是虚拟的逻辑分组,用来过滤 Document。
不同的 Type 中同一个字段 应该有相似的结构(schema),举例来说,id字段不能在这个组是字符串,在另一个组是数值。这是与关系型数据库的表的一个区别。
Type是通过mapping定义的。mapping中主要包括字段名、字段数据类型和字段索引类型这3个方面的定义,相当于关系型数据库中的schema。
- Node 与 Cluster :
单个 Elastic 实例称为一个节点(node)。一组节点构成一个集群(cluster)。
- _shards(分片):
分片。每个索引有一个或多个分片,索引的数据被分配到各个分片上,分片有助于横向扩展,N个分片会被尽可能平均地(rebalance)分配在不同的节点上。
水平拓展,减小单个节点的压力,提高性能。
- replica(副本):
故障转移,容错。在 shard/node 故障的情况下提供了高可用性。
二、常用请求:
-
POST请求 :新建记录,或者是更新记录.
-
DELETE请求 :删除index。
-
GET 请求:查看这条记录
三、常用命令
- 查询所有记录:
使用 GET 方法,直接请求/Index/Type/_search,就会返回所有记录。
- 根据id查询:
使用 GET 方法,直接请求/Index/Type/Id。
GET 索引名称/类型名称/具体id
- 查看所有索引:
以下的v是用来要求在结果中返回表头的.
GET /_cat/indices?v
- 新增记录:
向指定的 /Index/Type 发送 PUT 请求,就可以在 Index 里面新增一条记录。比如,向/accounts/person发送请求,就可以新增一条人员记录。
???
- 参数 pretty=true 表示以易读的格式返回。
GET 索引名称/_search?pretty=true
- _search:
/_search:所有索引,所有type下的所有数据都搜索出来;
/index1/_search:指定一个index,搜索其下所有type的数据;
/index1,index2/_search:同时搜索两个index下的数据;
/1,2/_search:按照通配符去匹配多个索引;
/index1/type1/_search:搜索一个index下指定的type的数据;
/index1/type1,type2/_search:可以搜索一个index下多个type的数据;
/index1,index2/type1,type2/_search:搜索多个index下的多个type的数据;
/_all/type1,type2/_search:_all,可以代表搜索所有index下的指定type的数据;
- 列出每个 Index 所包含的 Type:
GET 索引名称/_mapping
- 分页搜索的语法size:
GET /_search?size=10
GET /_search?size=10&from=0
GET /_search?size=10&from=20
四、返回内容:
格式如下:
{
"took": 80,
"timed_out": false,
"_shards": {
"total": 3,
"successful": 3,
"failed": 0
},
"hits": {
"total": 19,
"max_score": 1,
"hits": [
{
"_index": "order_dept",
"_type": "order_dept_hour",
"_id": "007",
"_score": 1,
"_source": {
"id": "20250816027R0030",
"dept_code": "020",
"order_date": "2025-08-27",
"order_num": 520,
"hour": "14"
}
}
}
具体的解释如下:
took字段表示该操作的耗时(单位为毫秒),timed_out字段表示是否超时,
hits字段表示命中的记录,里面子字段的含义如下。
* total:返回记录数,本例是2条。
* max_score:最高的匹配程度,本例是1.0。
* hits:返回的记录组成的数组。
* _score字段,表示匹配的程度,分值越高就代表越匹配。
* _source: 表示字段。
参考资料:
http://blog.itpub.net/29715045/viewspace-2653369/
https://blog.csdn.net/qq_29580525/article/details/80908523