一 模拟造数
1.1 模拟数据
添加数据修改数据的请求方式为post
http://localhost:9200/student/_doc/101
{
"name":"zhangsan",
"nickname":"zhangsan",
"sex":"男",
"age":30,
"createTime":"2022-10-22 23:10:12"
}
http://localhost:9200/student/_doc/102
{
"name":"lisi",
"nickname":"lisi",
"sex":"男",
"age":20,
"createTime":"2023-02-01 12:03:04"
}
http://localhost:9200/student/_doc/103
{
"name":"wangwu",
"nickname":"wangwu",
"sex":"女",
"age":40,
"createTime":"2023-03-05 12:45:23"
}
http://localhost:9200/student/_doc/104
{
"name":"zhangsan1",
"nickname":"zhangsan1",
"sex":"女",
"age":50,
"createTime":"2023-04-09 12:45:12"
}
http://localhost:9200/student/_doc/105
{
"name":"zhangsan2",
"nickname":"zhangsan2",
"sex":"女",
"age":30,
"createTime":"2022-05-01 10:08:02"
}
1.2 修改数据覆盖旧数据*
1.通过id修改数据: 修改前
2.修改中:
3.修改后
二 常用操作
2.1 查询全部数据
{
"query": {
"match_all": {}
}
}
2.2 匹配查询数据(match)
match 匹配类型查询,会把查询条件进行分词,然后进行查询,多个词条之间是 or 的关系。
{
"query": {
"match": {
"name":"zhangsan"
}
}
}
2.3 字段匹配
{"query": {
"multi_match": {
"query": "zhangsan",
"fields": ["name","nickname"]
}
}
}
2.4 精确查询(term)
term 查询,精确的关键词匹配查询,不对查询条件进行分词。
{
"query": {
"term": {
"name": {
"value": "wangwu"
}
}
}
}
2.5 精确查询(多-term)
term 查询,精确的关键词匹配查询,不对查询条件进行分词。
{
"query": {
"terms": {
"name": ["zhangsan","lisi"]
}
}
}
2.6 返回指定的字段
includes:来指定想要显示的字段
excludes:来指定不想要显示的字段
{
"_source": {
"includes": ["name","age"]
},
"query": {
"terms": {
"nickname": ["zhangsan"]
}
}
}
2.7 返回指定的字段
`bool`把各种其它查询通过`must`(必须 )、`must_not`(必须不)、`should`(应该)的方
式进行组合
http://localhost:9200/student/_search
{"query": {
"bool": {
"must": [
{
"match": {
"name": "zhangsan"
}
}
],
"must_not": [
{
"match": {
"age": "40"
}
}
]
}
}
}
2.8 组合查询
查询语句:
{
"query": {
"range": {
"age": {
"gte": 30,
"lte": 35
}
}
}
}
2.9 fuzzy组合查询
为了找到相似的术语,fuzzy 查询会在指定的编辑距离内创建一组搜索词的所有可能的变体
或扩展。然后查询返回每个扩展的完全匹配。
通过 fuzziness 修改编辑距离。一般使用默认值 AUTO,根据术语的长度生成编辑距离
{
"query": {
"fuzzy": {
"name": {
"value": "zhangsan"
}
}
}
}
2.10 sort排序
sort 可以让我们按照不同的字段进行排序,并且通过 order 指定排序的方式。desc 降序,asc 升序。
"query": {
"match": {
"name":"zhangsan"
}
},
"sort": [{
"age": {
"order":"desc"
}
}]
}
2.11 多字段排序
使用 age 和 _score 进行查询,并且匹配的结果首先按照年龄排序,然后 按照相关性得分排序
{
"query": {
"match_all": {}
},
"sort": [
{
"age": {
"order": "desc"
}
},
{
"_score":{
"order": "desc"
}
}
]
}
2.12 高亮显示
Elasticsearch 可以对查询内容中的关键字部分,进行标签和样式(高亮)的设置。
在使用 match 查询的同时,加上一个 highlight 属性:
pre_tags:前置标签
post_tags:后置标签
fields:需要高亮的字段
title:这里声明 title 字段需要高亮,后面可以为这个字段设置特有配置,也可以空
{
"query": {
"match": {
"name": "zhangsan"
}
},
"highlight": {
"pre_tags": "<font color='red'>",
"post_tags": "</font>",
"fields": {
"name": {}
}
}
}
2.13 分页
from:当前页的起始索引,默认从 0 开始。 from = (pageNum - 1) * size
size:每页显示多少条
{
"query": {
"match_all": {}
},
"sort": [
{
"age": {
"order": "desc"
}
}
],
"from": 0,
"size": 2
}
2.14 聚合查询
聚合允许使用者对 es 文档进行统计分析,类似与关系型数据库中的 group by,当然还有很多其他的聚合,例如取最大值、平均值等等。
{
"aggs":{
"max_age":{
"max":{"field":"age"}
}
},
"size":0
}
2.15 去重查询
{
"aggs":{
"distinct_age":{
"cardinality":{"field":"age"}
}
},
"size":0
}
2.16 state求出全部聚合参数
stats 聚合,对某个字段一次性返回 count,max,min,avg 和 sum 五个指标
{
"aggs":{
"stats_age":{
"stats":{"field":"age"}
}
},
"size":0
}
2.17 桶聚合
桶聚和相当于 sql 中的 group by 语句。
{
"aggs":{
"age_groupby":{
"terms":{"field":"age"},
"aggs":{
"sum_age":{
"sum":{"field":"age"}
}
}
}
},
"size":0
}
2.18 分组统计
桶聚和相当于 sql 中的 group by 语句。
{
"aggs":{
"age_groupby":{
"terms":{"field":"age"}
}
},
"size":0
}
2.19 时间范围查询
1.定义mapping结构
"createTime":{
"type": "date",
"format":"yyyy-MM-dd HH:mm:ss||yyyy-MM-dd||epoch_millis",
"index": true
}
2.查询语句
{
"query": {
"range": {
"createTime": {
"gte": "2023-01-01 00:00:00",
"lte": "2023-04-30 23:59:59",
"format":"yyyy-MM-dd HH:mm:ss",
"include_lower":true,
"include_upper":true
}
}
}
}