ElastaticSearch ---- es基础概念及命令

Elasticsearch 介绍

  • Elasticsearch 是一个高度可扩展且开源的全文检索和分析引擎。可以快速且近实时地存储,检索以及分析海量数据。

Elasticsearch 应用场景:

  • 提供搜索和自动完成功能。

  • ELK(Elasticsearch/Logstash/Kibana ),Logstash收集数据或日志,Elasticsearch聚合统计分析数据,Kibana可视化。

为什么不用Mysql?

  • 为什么不用Mysql?

解答:Mysql在做模糊查询时,使用左模糊不会走索引,会遍历全表,速度比较慢。

Mysql数据库并不支持分词。

  • Elasticsearch搜索到的数据,是可以根据评分排序或过滤的。

  • Elasticsearch会对数据进行分词,支持相关性查询,不是完全准确的关键字也能搜出相关的结果

Elasticsearch底层

  • Elasticsearch是基于倒排索引的。

倒排索引(Inverted index),也常被称为反向索引,被用来存储在全文搜索下某个单词在文档中的存储位置的映射。

它是文档检索系统中最常用的数据结构。通过倒排索引,可以根据单词快速获取包含这个单词的文档列表。

一、概念

  • 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 故障的情况下提供了高可用性。

二、常用请求:

三、常用命令

  • es查询所有记录:

使用 GET 方法,直接请求/索引名称/类型名称/_search,就会返回所有记录。

  • es根据id查询:

使用 GET 方法,直接请求 /索引名称/类型名称/文档Id。

复制代码
	GET 索引名称/类型名称/具体id

如果是在服务器中,也可以使用以下命令:

复制代码
curl -XGET http://es集群ip:9200/索引名称/类型名称/具体id?pretty  
  • es查看所有索引:

以下的v是用来要求在结果中返回表头的.

复制代码
 GET /_cat/indices?v 
  • es新增记录:

向指定的 /索引名称/类型名称/ 发送 POST 请求,就可以在 Index 里面新增一条记录。比如,向/accounts/person发送请求,就可以新增一条人员记录。

复制代码
POST /索引名称/类型名称/

示例如下:

复制代码
POST /accounts/person
{
  "name": "lin",
  "date": "2020-10-24",
  "order_hour": "08",
  "day": "20201024",
  "area": "广东"
}

也可以在服务器中,直接用curl去新增数据,示例如下:

复制代码
curl -XPOST http://es集群ip:9200/accounts/person -d '{"name": "lin","date": "2020-10-24","order_hour": "08","day": "20201024","area": "广东"}'
  • es删除记录:

    DELETE /索引名称/类型名称/具体的id

  • es新增索引:

    PUT /book #put /book 代表put请求,含义是添加一个索引,book是索引名
    {
    "settings": { #settings指的是设置索引,库的属性
    "number_of_replicas": 1 #number_of_replicas:是备份数量
    , "number_of_shards": 5 #number_of_shards:是分片数量
    }
    ,"mappings": { #mappings是映射的含义 mappings里面包含类型也就是表的定义;
    "novel":{ #novel 是自定义的指的是类型名,相当于表名
    "properties":{ #properties 是属性的意思;相当于里面放着表的属性也就是列名
    "name":{ #name是表的其中一个字段;
    "type":"text", #type是表中name这个字段的数据类型
    "analyzer":"ik_max_word", #analyzer 表示分词的类型;
    "index":true #index含义是是否要被检索到,默认是true
    },
    "author":{ # author是一个字段名;
    "type":"keyword", #keyword 是这个字段的类型;
    "index":true
    },
    "price":{
    "type":"long",
    "index":true
    },
    "pubdate":{
    "type":"date", #pubdate 的格式是date,日期类型;
    "index":true,
    "format":"yyyy-MM-dd HH:mm:ss" #format指的是日期的格式类型;
    },
    "decr":{
    "type":"text",
    "index":true
    },
    "count":{
    "type":"long",
    "index":false
    }
    }
    }
    }
    }

参考资料:https://blog.csdn.net/weixin_52578409/article/details/110493719

  • es新增字段:
    格式如下:

    PUT /索引名称/_mapping/类型名称

    {
    "properties": {
    "属性名称": {
    "type": "long"
    }
    }
    }

示例如下:

复制代码
PUT /index_order/_mapping/type_order
{
"properties": {
  "delivery15kg": {
	"type": "long"
  }
}
}
  • 参数 pretty=true 表示以易读的格式返回。

    GET 索引名称/_search?pretty=true

  • _search:

/_search:所有索引,所有type下的所有数据都搜索出来;

/索引名称/_search:指定一个index,搜索其下所有type的数据;

/索引名称1,索引名称2/_search:同时搜索两个index下的数据;

/*索引/_search:按照通配符星号去匹配多个索引;

/索引名称/类型名称/_search:搜索一个index下指定的type的数据;

/索引名称/类型名称1,类型名称2/_search:可以搜索一个index下多个type的数据;

/索引名称1,索引名称2/类型名称1,类型名称2/_search:搜索多个index下的多个type的数据;

/_all/类型名称1,类型名称2/_search:_all,可以代表搜索所有index下的指定type的数据;

  • es 查询索引的字段结构/数据结构

    GET /索引名称/_mapping

  • es 添加/更新别名:

    PUT /索引名称/_alias/别名名称

  • es 查询别名:

    GET /索引名称/_alias

  • 分页搜索的语法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: 表示字段。

es 7.0 增删改查

es 7.0中只有索引和文档(记录),没有类型(type)了。

详情见: https://www.cnblogs.com/expiator/p/17480944.html

参考资料:

http://blog.itpub.net/29715045/viewspace-2653369/

https://blog.csdn.net/qq_29580525/article/details/80908523

https://www.cnblogs.com/ghj1976/p/5293250.html

http://doc.codingdict.com/elasticsearch/0/

https://www.zhihu.com/question/323811022

相关推荐
Biehmltym8 小时前
【AI】09AI Agent LLM → Streaming → Session 记录 的完整链路
大数据·人工智能·elasticsearch
小湘西9 小时前
Elasticsearch 的一些默认配置上下限
java·大数据·elasticsearch
Dxy123931021612 小时前
Elasticsearch 8如何做好标题搜索
大数据·elasticsearch
斯普信云原生组12 小时前
Elasticsearch(ES) 内存 CPU 过高问题排查报告
大数据·elasticsearch·搜索引擎
弘毅 失败的 mian13 小时前
Git 分支管理
大数据·经验分享·笔记·git·elasticsearch
阿坤带你走近大数据14 小时前
Elasticsearch(ES)的基本概念、架构及基本使用介绍
大数据·elasticsearch
Elastic 中国社区官方博客14 小时前
使用 Elasticsearch 中的结构化输出创建可靠的 agents
大数据·人工智能·elk·elasticsearch·搜索引擎·ai·全文检索
G皮T15 小时前
【Elasticsearch】查询性能调优(六):track_total_hits 影响返回结果的相关性排序吗
大数据·数据库·elasticsearch·搜索引擎·全文检索·性能·opensearch
LCG米16 小时前
嵌入式Linux系统构建:为STM32MP157移植Buildroot并开发温湿度采集驱动
linux·stm32·elasticsearch
phil zhang16 小时前
Celer:为大型C/C++项目打造的极简包管理器
开发语言·c++·elasticsearch