ElasticSearch-02-ES的基本操作与高级查询语法

一、 基本操作

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"]
}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值