大家好,欢迎来到IT知识分享网。
一、前言
- es是面向文档型数据库,一条数据就是一个文档,可以通过下面这张表与关系型数据库进行类比:
| ES | Mysql |
|---|---|
| Index(索引) | Database(数据库) |
| Type(类型:es7+已删除) | Table(表) |
| Documents(文档) | Row(行) |
| Field(字段) | Column(列) |
- 正排索引: 用 id 建立索引,通过 id 查询数据。
倒排索引: 用数据中的 关键词 建立索引,通过 关键词 查询id
二、查询语句
1.综合
<1>帮助
GET /_cat/health?help
<2>查询所有
GET /_search {
"query": {
"match_all": {
} } }
<3>查看集群健康信息
GET /_cat/health?v
<4>查看集群中节点信息
GET /_cat/nodes?v
<5>查看集群中的索引信息
# 第一种 GET /_cat/indices?v # 第二种(简化) GET /_cat/indices?v&h=health,status,index
2.索引
<1>新增
PUT /book
<2>删除
DELETE /book
<3>查询
列出全部索引信息
GET /_cat/indices?v
3.文档
<1>声明索引下的文档字段类型
先创建索引
PUT /book {
"settings": {
"number_of_shards": 5, "number_of_replicas": 1 }, "mappings": {
"dynamic": "strict", # 插入数据时,如果遇到不存在的字段,不新增字段,直接报错 "properties": {
"title": {
"type": "text", "index": true }, "publisher": {
"type": "keyword", "index": true }, "page": {
"type": "text", "index": false }, "my_vector": {
"type": "dense_vector", "dims": 2 } } } }
ps:
- “type”: “text”
文本类型【使用 match 检索时自动进行分词】 - “type”: “keyword”
键值类型【使用 match 检索时不会进行分词】 - “index”: true
建立索引【参与检索】 - “index”: false
不建立索引【不参与检索】
<2>新增
– 新增时指定id
POST /book/_doc/1 {
"title":"历史上的今天", "created":"2018-12-25" }
– 新增时不指定id【随机生成id】
POST /book/_doc {
"title":"历史上的今天", "created":"2018-12-25" }
<3>删除
根据id删除
DELETE /book/_doc/1
<4>修改
– 根据id修改【全部字段】
# title 和 created 全部更新 PUT /book/_doc/1 {
"title":"历史上的今天2", "created":"2021-01-01" }
– 根据id修改【单个字段】
# 仅更新 created POST /book/_update/1 {
"doc": {
"created":"2021-01-01" } }
<5>查询
– 根据id查询
查询 book 索引下 _id 为 1 的文档
# 写法1 GET /book/_doc/1 # 写法2 GET /book/_search {
"query": {
"match": {
"_id": 1 } } }
– 查询全部
查询 book 索引下的全部文档【默认返回前10000条】
# 写法1 GET /book/_search # 写法2 GET /book/_search {
"query": {
"match_all": {
} } } # 写法3 GET /book/_doc/_search
– 查询总数
查询 book 索引下的文档总数
GET /book/_count
– 分词查询
GET /book/_search {
"query": {
"match": {
"title": "历史上的今天" } } }
ps:
- match
分词查询【检索 book 索引中 title 包含 历史、历史上、今天、历史上的今天 的数据】 - match_phrase
不分词查询【检索 book 索引中 title 只包含 历史上的今天 的数据】
– 单条件查询
查询 book 索引下满足 title 包含 历史上的今天 的数据
# 推荐写法 GET /book/_search {
"query": {
"match_phrase": {
"title": "历史上的今天" } } } # 不推荐写法 GET /book/_search?q=title:历史上的今天
– 多条件查询【and】
查询 book 索引下满足 title 包含 历史上的今天 and created=2018-12-20 的数据
GET /book/_search {
"query": {
"bool": {
"must": [ {
"match_phrase": {
"title": "历史上的今天" } }, {
"match_phrase": {
"created": "2018-12-20" } } ] } } }
– 多条件查询【or】
查询 book 索引下满足 title 包含 历史上的今天 or title 包含 历史上的今天2 的数据
GET /book/_search {
"query": {
"bool": {
"should": [ {
"match_phrase": {
"title": "历史上的今天" } }, {
"match_phrase": {
"title": "历史上的今天2" } } ] } } }
– 查询结果高亮显示
查询 book 索引中满足 title 包含 “历史” 的数据,并将检索结果中的历史俩字用<em>标签包裹
GET /book/_search {
"query": {
"match_phrase": {
"title": "历史" } }, "highlight": {
"fields": {
"title": {
} } } }
ps:
– 范围查询
查询 book 索引下满足 price > 100 的数据
GET /book/_search {
"query": {
"bool": {
"filter": {
"range": {
"price": {
"gt": 100.00 } } } } } }
ps:
- gt 大于
- gte 大于等于
- it 小于
- ite 小于等于
– 分页查询
分页查询 book 索引下的全部数据,查询第1页,每页2条数据
GET /book/_search {
"from": 0, "size": 2 }
– 指定查询结果的返回字段
查询 book 索引下的全部数据,仅返回 title 字段
GET /book/_search {
"_source": ["title"] }
– 对查询结果排序
查询 book 索引下的全部数据,以创建时间降序排序
GET /book/_search {
"sort": {
"created": {
"order": "desc" } } }
ps:
- 升序 asc
- 降序 desc
– 聚合查询
对 book 索引下的 title 字段进行聚合查询
GET /book/_search {
"aggs": {
"title_group": {
"terms": {
"field": "title.keyword", "size": 10 } } }, "size": 0 }
ps:
- “title_group”: {
操作名称【这名随便起】 - “terms”: {
聚合操作 - “field”: “title.keyword”,
对哪个字段聚合【字符串类型需要加.keyword】 - “size”: 10
最大返回数 - “size”: 0
不返回命中数据
– 查询平均值
对 book 索引下的 price 字段求平均值
GET /book/_search {
"aggs": {
"price_avg": {
"avg": {
"field": "price" } } }, "size": 0 }
ps:
- “price_avg”: {
操作名称【这名随便起】 - “avg”: {
求平均操作 - “field”: “price”
对哪个字段求平均值 - “size”: 0
不返回命中数据
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/116944.html