一、 基本操作
1、索引
1.1、创建
# 1、创建索引
- PUT /索引名 ===》PUT /products
- 注意:
- 1.ES中索引健康转态red(索引不可用) 、yellwo(索引可用,存在风险)、green(健康)
- 2.默认ES在创建索引时回为索引创建1个备份索引和一个primary索引
#创建索引进行索引分片配置
-PUT /products
{
"settings":{
"number_of_shards":1,#指定主分片的数量
"number_of_replicas": 0 #指定副本分片的数量
}
}
1.2、删除索引
#删除索引
DELETE /products
2、映射
2.1、创建映射
常见类型
字符串类型:keyword(关键词等)、text(一段文本)
数字类型:integer long
小数类型:float double
布尔类型:boolean
日期类型:date
#创建映射
#创建商品索引,指定mapping{id、title、price、created_at\description}
PUT /products
{
"settings": {
"number_of_shards": 1,
"number_of_replicas": 0
},
"mappings": {
"properties": {
"id": {
"type": "integer"
},
"title":{
"type": "keyword"
},
"price": {
"type": "double"
},
"created_at":{
"type": "date"
},
"description":{
"type": "text"
}
}
}
}
2.2、查看映射
#查看某个索引的映射信息
GET /products/_mapping
3、文档
3.1、添加文档
#添加文档
POST /products/_doc/1 #指定文档id
{
"id":1,
"title":"测试",
"price":0.5,
"created_at":"2021-11-17",
"description":"哈哈哈哈测试用"
}
#自动生成文档id
POST /products/_doc
{
"title":"测试2",
"price":111.5,
"created_at":"2021-06-07",
"description":"测试"
}
3.2、文档查询
根据id查询文档:
#文档查询
get /products/_doc/1
3.3、删除文档
根据id删除
DELETE /products/_doc/1
3.4、更新文档
#这种更新方式会删除原始文档,只添加修改的文档
PUT /products/_doc/1
{
"title":"修改测试"
}
推荐的方式:使用post方式 就不会删除原来的数据
#更新文档,基于指定字段进行更新
POST /products/_doc/1/_update
{
"doc":{
"title":"测试啊"
}
}
文档的批量操作
#批量操作 _bulk
POST /products/_doc/_bulk
{"index":{"_id":2}}
{ "id":2, "title":"批量操作","price":111.5,"created_at":"2021-11-17","description":"测试用"}
{"index":{"_id":3}}
{"id":3,"title":"日本豆","price":1.5,"created_at":"2021-11-17","description":"不错"}
get /products/_doc/2
#文档批量操作 添加、更新、删除
POST /products/_doc/_bulk
{"index":{"_id":4}}
{ "id":4, "title":"批量tianija","price":111.5,"created_at":"2021-11-17","description":"测试用"}
{"update":{"_id":3}}
{"doc":{"title":"假按揭啊级啊"}}
{"delete":{"_id":2}}
注意:
这里的添加文档操作 ,不能有换行,只能写在一行才可以运行成功。
2、高级查询(Query DSL)
2.1、说明
ES中提供了一种强大的检索数据方式,这种检索方式称之为Query DsL
(Domain Specified Language) ,Query DSL是利用Rest API传递JSON格式的请求体(Request Body)数据与ES进行交互,这种方式的丰富查询语法让ES检索变得更强大,更简洁。
2.2、语法
GET /索引名/_doc/_search {json格式请求体数据}
GET /索引名/_search {json格式请求体数据}
2.2.1全查询:match_all
# query DSL 语法 查询所有 match_all
GET /products/_doc/_search
{
"query":{
"match_all":{}
}
}
#没有_doc查询的语句,在下面主体部分还会有提示。
GET /products/_search
{
"query":{
"match_all":{}
}
}
2.2.2 分词查询:term
# term 基于关键字查询
#keyword 日后搜索要全文索引 不分词
#text类型,默认es标准分词器 中文是单字分词 英文是单词分词
#integer、double 不分词(需要全文搜索)
GET /products/_search
{
"query":{
"term": {
"description": {
"value": "试"
}
}
}
}
2.2.3范围查询:range
range 关键词“用来指定查询范围内的文档”
#范围查询
GET /products/_search
{
"query": {
"range":{
"price": {
"gte": 0,
"lte": 22220
}
}
}
}
2.2.4前缀查询:prefix
用来检索含有指定前缀的关键词的相关文档
#前缀查询 prefix
GET /products/_search
{
"query": {
"prefix": {
"title": {
"value": "批"
}
}
}
}
2.2.5通配符查询:wildcard
通配符查询
1、? 用来匹配一个任意字符
2、 * 用来匹配多个任意字符
#通配符 wildcard 查询
GET /products/_search
{
"query": {
"wildcard": {
"title": {
"value": "测试?"
}
}
}
}
2.2.6 多id查询:ids
值为数组类型,用来根据一组id获取多个对应的文档
# ids查询 查询一组符合条件的id
GET /products/_search
{
"query": {
"ids": {
"values": [1,3,4]
}
}
}
2.2.7 模糊查询:fuzzy
用来模糊查询含有指定关键词的文档·
#fuzzy 模糊查询
GET /products/_search
{
"query": {
"fuzzy": {
"title": "测试吗"
}
}
}
# 比如title 是 测试啊 测试2 那么测试吗 就能搜索两个
注意:fuzzy 模糊查询 最大模糊错误 必须在0-2之间
- 搜索关键词长度为2 不允许存在模糊
- 搜索关键词长度为3-5 允许一次模糊
- 搜索关键词长度大于5允许最大2模糊
2.2.8布尔查询:bool
布尔关键字用来组合多个条件实现复杂查询
must:相当于&&同时成立
should:相当于|| 成立一个就行
must_not:相当于 ! 不能满足任何一个
#bool查询
GET /products/_search
{
"query": {
"bool": {
"must": [
{
"ids": {
"values": [1]
}
}
, {"term": {
"title": {
"value": "测试?"
}
}
}
]
}
}
}
2.2.9多字段查询:multi_match
注意:字段类型分词,将查询条件分词之后进行查询改字段,如果该字段不分词就会将查询条件作为整体进行查询
# 多字段查询 multi_match
# query 可以输入关键词也可以输入一段文本
GET /products/_search
{
"query": {
"multi_match": {
"query": "测试",
"fields": ["title","description"]
}
}
}
2.2.10 query_string
注意:查询字段分词将查询条件分词查询,查询字段不分词将查询条件不分词
#query_string 默认字段分词查询:
GET /products/_search
{
"query": {
"query_string": {
"default_field": "description",
"query": "测试"
}
}
}
2.2.11高亮查询:highlight
可以让符合条件的文档中的关键词高亮
GET /products/_search
{
"query": {
"term": {
"description": {
"value": "测"
}
}
},
"highlight": {
"fields": {
"*":{}
}
}
}
注意:只有可分词的类型才能用高亮
2.2.12返回指定条数:size
指定查询结果返回指定条数,默认返回10
GET /products/_search
{
"query": {
"match_all": {}
},
"size": 3
}
2.2.13分页查询:from
用来指定起始返回位置,和size关键字连用可实现分页效果
#分页查询:form
GET /products/_search
{
"query": {
"match_all": {}
},
"size": 2,
"from": 3 # 当前页减一
}
2.2.14指定字段排序:sort
#分页查询:form
GET /products/_search
{
"query": {
"match_all": {}
},
"size": 2,
"from": 2,
"sort": [
{
"price": {
"order": "desc"
}
}
]
}
2.2.15返回指定字段:source
是一个数组,在数组中用来指定展示字段
#返回指定字段:source
GET /products/_search
{
"query": {
"match_all": {}
},
"_source": ["price","description"]
}