Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >ElasticSearch常见用法, 看这一篇就够了

ElasticSearch常见用法, 看这一篇就够了

作者头像
架构狂人
发布于 2023-09-13 04:39:18
发布于 2023-09-13 04:39:18
36800
代码可运行
举报
文章被收录于专栏:架构狂人架构狂人
运行总次数:0
代码可运行

基本操作

索引

创建
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 1.创建索引
- PUT /索引名 ====> PUT /products
- 注意: 
 1.ES中索引健康转态  red(索引不可用) 、yellwo(索引可用,存在风险)、green(健康)
 2.默认ES在创建索引时回为索引创建1个备份索引和一个primary索引
		
# 2.创建索引 进行索引分片配置
- PUT /products
{
  "settings": {
    "number_of_shards": 1, #指定主分片的数量
    "number_of_replicas": 0 #指定副本分片的数量
  }
}

)

查询
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 查询索引
- GET /_cat/indices?v
删除
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 3.删除索引
- DELETE /索引名 =====> DELETE /products
- DELETE /*     `*代表通配符,代表所有索引`
创建

字符串类型: keyword 关键字 关键词 、text 一段文本

数字类型:integer long

小数类型:float double

布尔类型:boolean

日期类型:date

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 1.创建索引&映射
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
PUT /products
{ 
  "settings": {
    "number_of_shards": 1,
    "number_of_replicas": 0
  }, 
  "mappings": {
    "properties": {
      "title":{
        "type": "keyword"
      },
      "price":{
        "type": "double"
      },
      "created_at":{
        "type": "date"
      },
      "description":{
        "type": "text"
      }
    }
  }
}

说明: ES中支持字段类型非常丰富,如:text、keyword、integer、long、ip 等。更多参见https://www.elastic.co/guide/en/elasticsearch/reference/7.15/mapping-types.html

查询
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 1.查看某个索引的映射
- GET /索引名/_mapping =====> GET /products/_mapping

文档

添加文档
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
POST /products/_doc/1 #指定文档id 
{
  "title":"iphone13",
  "price":8999.99,
  "created_at":"2021-09-15",
  "description":"iPhone 13屏幕采用6.1英寸OLED屏幕。"
}
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
POST /products/_doc/ #自动生成文档id
{
  "title":"iphone14",
  "price":8999.99,
  "created_at":"2021-09-15",
  "description":"iPhone 13屏幕采用6.8英寸OLED屏幕"
}
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{
  "_index" : "products",
  "_type" : "_doc",
  "_id" : "sjfYnXwBVVbJgt24PlVU",
  "_version" : 1,
  "result" : "created",
  "_shards" : {
    "total" : 1,
    "successful" : 1,
    "failed" : 0
  },
  "_seq_no" : 3,
  "_primary_term" : 1
}
查询文档
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
GET /products/_doc/1
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{
  "_index" : "products",
  "_type" : "_doc",
  "_id" : "1",
  "_version" : 1,
  "_seq_no" : 0,
  "_primary_term" : 1,
  "found" : true,
  "_source" : {
    "title" : "iphone13",
    "price" : 8999.99,
    "created_at" : "2021-09-15",
    "description" : "iPhone 13屏幕采用6.1英寸OLED屏幕"
  }
}
删除文档
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
DELETE /products/_doc/1
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{
  "_index" : "products",
  "_type" : "_doc",
  "_id" : "1",
  "_version" : 2,
  "result" : "deleted",
  "_shards" : {
    "total" : 1,
    "successful" : 1,
    "failed" : 0
  },
  "_seq_no" : 2,
  "_primary_term" : 1
}
更新文档
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
PUT /products/_doc/sjfYnXwBVVbJgt24PlVU
{
  "title":"iphon15"
}

说明: 这种更新方式是先删除原始文档,再将更新文档以新的内容插入。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
POST /products/_doc/sjfYnXwBVVbJgt24PlVU/_update
{
    "doc" : {
        "title" : "iphon15"
    }
}

说明: 这种方式可以将数据原始内容保存,并在此基础上更新。

批量操作
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
POST /products/_doc/_bulk #批量索引两条文档
 	{"index":{"_id":"1"}}
  		{"title":"iphone14","price":8999.99,"created_at":"2021-09-15","description":"iPhone 13屏幕采用6.8英寸OLED屏幕"}
	{"index":{"_id":"2"}}
  		{"title":"iphone15","price":8999.99,"created_at":"2021-09-15","description":"iPhone 15屏幕采用10.8英寸OLED屏幕"}
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
POST /products/_doc/_bulk #更新文档同时删除文档
	{"update":{"_id":"1"}}
		{"doc":{"title":"iphone17"}}
	{"delete":{"_id":2}}
	{"index":{}}
		{"title":"iphone19","price":8999.99,"created_at":"2021-09-15","description":"iPhone 19屏幕采用61.8英寸OLED屏幕"}

说明:批量时不会因为一个失败而全部失败,而是继续执行后续操作,在返回时按照执行的状态返回!

高级查询

说明

ES中提供了一种强大的检索数据方式,这种检索方式称之为Query DSL,Query DSL是利用Rest API传递JSON格式的请求体(Request Body)数据与ES进行交互,这种方式的丰富查询语法让ES检索变得更强大,更简洁

语法

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# GET /索引名/_doc/_search {json格式请求体数据}
# GET /索引名/_search {json格式请求体数据}
  • 测试数据
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 1.创建索引 映射
PUT /products/
{
  "mappings": {
    "properties": {
      "title":{
        "type": "keyword"
      },
      "price":{
        "type": "double"
      },
      "created_at":{
        "type":"date"
      },
      "description":{
        "type":"text"
      }
    }
  }
}
# 2.测试数据
PUT /products/_doc/_bulk
{"index":{}}
  {"title":"iphone12 pro","price":8999,"created_at":"2020-10-23","description":"iPhone 12 Pro采用超瓷晶面板和亚光质感玻璃背板,搭配不锈钢边框,有银色、石墨色、金色、海蓝色四种颜色。宽度:71.5毫米,高度:146.7毫米,厚度:7.4毫米,重量:187克"}
{"index":{}}
  {"title":"iphone12","price":4999,"created_at":"2020-10-23","description":"iPhone 12 高度:146.7毫米;宽度:71.5毫米;厚度:7.4毫米;重量:162克(5.73盎司) [5]  。iPhone 12设计采用了离子玻璃,以及7000系列铝金属外壳。"}
{"index":{}}
  {"title":"iphone13","price":6000,"created_at":"2021-09-15","description":"iPhone 13屏幕采用6.1英寸OLED屏幕;高度约146.7毫米,宽度约71.5毫米,厚度约7.65毫米,重量约173克。"}
{"index":{}}
  {"title":"iphone13 pro","price":8999,"created_at":"2021-09-15","description":"iPhone 13Pro搭载A15 Bionic芯片,拥有四种配色,支持5G。有128G、256G、512G、1T可选,售价为999美元起。"}

常见检索

查询所有[match_all]

match_all关键字: 返回索引中的全部文档

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
GET /products/_search
{
  "query": {
    "match_all": {}
  }
}
关键词查询(term)

term 关键字: 用来使用关键词查询

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
GET /products/_search
{
 "query": {
   "term": {
     "price": {
       "value": 4999
     }
   }
 }
}

NOTE1: 通过使用term查询得知ES中默认使用分词器为标准分词器(StandardAnalyzer),标准分词器对于英文单词分词,对于中文单字分词

NOTE2: 通过使用term查询得知,在ES的Mapping Type 中 keyword , date ,integer, long , double , boolean or ip 这些类型不分词,只有text类型分词

范围查询[range]

range 关键字: 用来指定查询指定范围内的文档

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
GET /products/_search
{
  "query": {
    "range": {
      "price": {
        "gte": 1400,
        "lte": 9999
      }
    }
  }
}
前缀查询[prefix]

prefix 关键字: 用来检索含有指定前缀的关键词的相关文档

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
GET /products/_search
{
  "query": {
    "prefix": {
      "title": {
        "value": "ipho"
      }
    }
  }
}
通配符查询[wildcard]

wildcard 关键字: 通配符查询 ? 用来匹配一个任意字符 * 用来匹配多个任意字符

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
GET /products/_search
{
  "query": {
    "wildcard": {
      "description": {
        "value": "iphon*"
      }
    }
  }
}
多id查询[ids]

ids 关键字 : 值为数组类型,用来根据一组id获取多个对应的文档

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
GET /products/_search
{
  "query": {
    "ids": {
      "values": ["verUq3wBOTjuBizqAegi","vurUq3wBOTjuBizqAegk"]
    }
  }
}
模糊查询[fuzzy]

fuzzy 关键字: 用来模糊查询含有指定关键字的文档

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
GET /products/_search
{
  "query": {
    "fuzzy": {
      "description": "iphooone"
    }
  }
}

注意: fuzzy 模糊查询 最大模糊错误 必须在0-2之间

  • 搜索关键词长度为 2 不允许存在模糊
  • 搜索关键词长度为3-5 允许一次模糊
  • 搜索关键词长度大于5 允许最大2模糊
布尔查询[bool]

bool 关键字: 用来组合多个条件实现复杂查询 must: 相当于&& 同时成立 should: 相当于|| 成立一个就行 must_not: 相当于! 不能满足任何一个

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
GET /products/_search
{
  "query": {
    "bool": {
      "must": [
        {"term": {
          "price": {
            "value": 4999
          }
        }}
      ]
    }
  }
}
多字段查询[multi_match]
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
GET /products/_search
{
  "query": {
    "multi_match": {
      "query": "iphone13 毫",
      "fields": ["title","description"]
    }
  }
}
注意: 字段类型分词,将查询条件分词之后进行查询改字段  如果该字段不分词就会将查询条件作为整体进行查询
默认字段分词查询[query_string]
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
GET /products/_search
{
  "query": {
    "query_string": {
      "default_field": "description",
      "query": "屏幕真的非常不错"
    }
  }
}
注意: 查询字段分词就将查询条件分词查询  查询字段不分词将查询条件不分词查询
高亮查询[highlight]

highlight 关键字: 可以让符合条件的文档中的关键词高亮

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
GET /products/_search
{
  "query": {
    "term": {
      "description": {
        "value": "iphone"
      }
    }
  },
  "highlight": {
    "fields": {
      "*":{}
    }
  }
}

自定义高亮html标签: 可以在highlight中使用pre_tagspost_tags

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
GET /products/_search
{
  "query": {
    "term": {
      "description": {
        "value": "iphone"
      }
    }
  },
  "highlight": {
    "post_tags": ["</span>"], 
    "pre_tags": ["<span style='color:red'>"],
    "fields": {
      "*":{}
    }
  }
}

多字段高亮 使用require_field_match开启多个字段高亮

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
GET /products/_search
{
  "query": {
    "term": {
      "description": {
        "value": "iphone"
      }
    }
  },
  "highlight": {
    "require_field_match": "false",
    "post_tags": ["</span>"], 
    "pre_tags": ["<span style='color:red'>"],
    "fields": {
      "*":{}
    }
  }
}
返回指定条数[size]

size 关键字: 指定查询结果中返回指定条数。 默认返回值10条

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
GET /products/_search
{
  "query": {
    "match_all": {}
  },
  "size": 5
}
分页查询[form]

from 关键字: 用来指定起始返回位置,和size关键字连用可实现分页效果

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
GET /products/_search
{
  "query": {
    "match_all": {}
  },
  "size": 5,
  "from": 0
}
指定字段排序[sort]
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
GET /products/_search
{
  "query": {
    "match_all": {}
  },
  "sort": [
    {
      "price": {
        "order": "desc"
      }
    }
  ]
}
返回指定字段[_source]

_source 关键字: 是一个数组,在数组中用来指定展示那些字段

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
GET /products/_search
{
  "query": {
    "match_all": {}
  },
  "_source": ["title","description"]
}
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2023-09-13 07:30,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 顶尖架构师栈 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
好玩的ES--第二篇之高级查询,索引原理和分词器
ES中提供了一种强大的检索数据方式,这种检索方式称之为Query DSL ,Query DSL是利用Rest API传递JSON格式的请求体(Request Body)数据与ES进行交互,这种方式的丰富查询语法让ES检索变得更强大,更简洁。
大忽悠爱学习
2022/05/10
1.4K0
好玩的ES--第二篇之高级查询,索引原理和分词器
好玩的ES---第一篇之安装和基本CRUD
全文检索是计算机程序通过扫描文章中的每一个词,对每一个词建立一个索引,指明该词在文章中出现的次数和位置。当用户查询时根据建立的索引查找,类似于通过字典的检索字表查字的过程。
大忽悠爱学习
2022/05/10
1.3K0
好玩的ES---第一篇之安装和基本CRUD
初识 Elasticsearch7.x(二)
REST 即表述性状态传递(英文:Representational State Transfer,简称 REST)是 Roy Fielding 博士在2000年他的博士论文中提出来的一种软件架构风格。REST 是一种规范。即参数通过封装后进行传递,响应也是返回的一个封装对象。一个 REST 的接口就像如下的接口:
Remember_Ray
2022/01/08
2.9K0
ElasticSearch快速入门(一)
Elaticsearch,简称为 ES, 是一个开源的高扩展的分布式全文搜索引擎 (这里说到的全文搜索引擎指的是目前广泛应用的主流搜索引擎)。与传统型关系数据库不同,Elaticsearch使用的是倒排索引,它的工作原理是计算机索引程序通过扫描文章中的每一个词,对每一个词建立一个索引,指明该词在文章中出现的次数和位置,当用户查询时,检索程序就根据事先建立的索引进行查找,并将查找的结果反馈给用户的检索方式。这个过程类似于通过字典中的检索字表查字的过程。
十玖八柒
2022/08/01
1.9K0
ElasticSearch快速入门(一)
ElasticSearch学习(二)——索引、文档简单操作
在Postman中发PUT请求:http://127.0.0.1:9200/index_name
传说之下的花儿
2023/04/16
5630
ElasticSearch学习(二)——索引、文档简单操作
01_ElasticSearch学习笔记
如何能正确的显示出用户想要的商品,并进行合理的过滤,尽快促成交易,是搜索系统要研究的核心。面对这样复杂的搜索业务和数据量,使用传统数据库搜索就显得力不从心,一般我们都会使用全文检索技术。 常见的全文检索技术有 Lucene、solr 、elasticsearch 等。
全栈程序员站长
2022/06/30
1.4K0
01_ElasticSearch学习笔记
Elasticsearch初识、document CRUD、聚合分析
lucene,最先进、功能最强大的搜索库,直接基于lucene开发,非常复杂,api复杂(实现一些简单的功能,写大量的java代码),需要深入理解原理(各种索引结构) lucene,单机应用,只能在单台服务器上使用,最多只能处理单台服务器可以处理的数据量
丁D
2022/08/12
3380
go-ElasticSearch入门看这一篇就够了(一)
ElasticSearch是一个分布式、RESTful风格的搜索和数据分析引擎,在国内简称为ES;使用Java开发的,底层基于Lucene是一种全文检索的搜索库,直接使用使用Lucene还是比较麻烦的,Elasticsearch在Lucene的基础上开发了一个强大的搜索引擎。前面说这么多,对于新手的你,其实还是不知道他是干什么的。简单来说,他就是一个搜索引擎,可以快速存储、搜索和分析海量数据。我们常用的github、Stack Overflow都采用的Es来做的。为了让你们知道他是干什么的,我们先来分析一下他的功能与适用场景。
Golang梦工厂
2022/07/07
2.4K1
Elasticsearch学习随笔与Scrapy中Elasticsearch的应用
节点: 一个节点是集群中的一个服务器,由一个名字来标识,默认是一个随机的漫画角色的名字
咸鱼学Python
2019/06/18
2K0
【Elasticsearch系列九】控制台实战
类比 sql: select * from book where name like ’ %java%’ order by price desc
kwan的解忧杂货铺
2024/09/17
1250
触类旁通Elasticsearch:搜索
ES的搜索请求执行流程如图1所示。图中索引包含两个分片,每个分片有一个副本分片。在给文档定位和评分后,缺省只会获取排名前10的文档。REST API搜索请求被发送到所连接的节点,该节点根据要查询的索引,将这个请求依次发送到所有的相关分片(主分片或者副本分片)。从所有分片收集到足够的排序和排名信息后,只有包含所需文档的分片被要求返回相关内容。这种搜索路由的行为是可配置的,图1展示的默认行为,称为查询后获取(query_then_fetch)。
用户1148526
2019/05/25
3.3K0
快速学习-ElasticaSearch6.2.1搜索管理
post:http://localhost:9200/xc_course/doc/_mapping
cwl_java
2020/01/14
4710
ES常用知识点整理第一部分
第三列倒排索引包含的信息为(文档ID,单词频次,<单词位置>),比如单词“乔布斯”对应的倒排索引里的第一项(1;1;<1>)意思是,文档1包含了“乔布斯”,并且在这个文档中只出现了1次,位置在第一个。
大忽悠爱学习
2023/02/13
5350
ES常用知识点整理第一部分
Elasticsearch中的三种分页策略深度解析:原理、使用及对比
from + size是Elasticsearch中最直观的分页方式。其中,from参数表示从第几条记录开始返回,size参数表示返回的记录数。
公众号:码到三十五
2024/05/13
2.3K0
Elasticsearch中的三种分页策略深度解析:原理、使用及对比
es各种查询
1、GET /lib/user/_search : 查询lib索引下的user类型的全部数据
爱撒谎的男孩
2019/12/31
7K0
elasticsearch中mapping全解实战
?原文地址为https://www.cnblogs.com/haixiang/p/12040272.html,转载请注明出处! ?es与java的整合以及常用CRUD、搜索API已被作者封装,开箱即
海向
2019/12/17
1.2K0
elasticsearch实战三部曲之三:搜索操作
本文是《elasticsearch实战三部曲》的终篇,作为elasticsearch的核心功能,搜索的重要性不言而喻,今天的实战都会围绕搜索展开;
程序员欣宸
2019/05/29
9230
elasticsearch实战三部曲之三:搜索操作
Lucene 和 Kibana、ElasticSeach、Spring Data ElasticSearch
结构化数据 - 行数据,可以用二维表结构来逻辑表达实现的数据;指具有固定格式或有限长度的数据,如数据库,元数据等。
RendaZhang
2020/12/02
2.4K0
DSL语言高级查询
对一个字段进行匹配查询,match 类型查询,match 类型查询,会把查询条件进行分词,or 关系,多个词条之间是 or 的关系:
程序员NEO
2023/09/27
4050
DSL语言高级查询
学好Elasticsearch系列-Query DSL
DSL是Domain Specific Language的缩写,指的是为特定问题领域设计的计算机语言。这种语言专注于某特定领域的问题解决,因而比通用编程语言更有效率。
BookSea
2023/08/03
4050
学好Elasticsearch系列-Query DSL
相关推荐
好玩的ES--第二篇之高级查询,索引原理和分词器
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验