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

相关推荐
alfiy1 小时前
Elasticsearch学习笔记(六)使用集群令牌将新加点加入集群
笔记·学习·elasticsearch
帅气的人1231 小时前
使用 docker-compose 启动 es 集群 + kibana
elasticsearch·docker
漫无目的行走的月亮2 小时前
比较Elasticsearch和Hadoop
hadoop·elasticsearch
hengzhepa10 小时前
ElasticSearch备考 -- Async search
大数据·学习·elasticsearch·搜索引擎·es
bubble小拾18 小时前
ElasticSearch高级功能详解与读写性能调优
大数据·elasticsearch·搜索引擎
不能放弃治疗18 小时前
重生之我们在ES顶端相遇第 18 章 - Script 使用(进阶)
elasticsearch
hengzhepa19 小时前
ElasticSearch备考 -- Search across cluster
学习·elasticsearch·搜索引擎·全文检索·es
Elastic 中国社区官方博客21 小时前
Elasticsearch:使用 LLM 实现传统搜索自动化
大数据·人工智能·elasticsearch·搜索引擎·ai·自动化·全文检索
慕雪华年1 天前
【WSL】wsl中ubuntu无法通过useradd添加用户
linux·ubuntu·elasticsearch
Elastic 中国社区官方博客1 天前
使用 Vertex AI Gemini 模型和 Elasticsearch Playground 快速创建 RAG 应用程序
大数据·人工智能·elasticsearch·搜索引擎·全文检索