ElasticSearch语法

目录

一、ES相关命令

新增名为index_first索引库

查询ES中所有的索引库

删除名为index_first索引库

二、ES的CRUD操作

插入一条商品数据

使用指定id查询商品数据

删除商品索引库

修改商品数据PUT方法(全局更新)

修改商品数据POST方法(局部更新)

查看所有数据

再添加两条数据,用于后面的测试

三、使用DSL语言

查询所有商品

条件查询

 按照价格排序

 实现分页查询

 返回指定字段的所有数据 

 多个查询条件(bool  )

 不分词,精确匹配(match_phrase)

查询结果高亮显示 (highlight)

 四、聚合分析

计算每个标签tag下商品的数量

 查询商品名称里包含苹果的,并计算每个tags下商品的数量

 设置索引类型

查看映射

 查询商品名称里面包含华为的数据,并且按照tags进行分组,计算每个分组下的平均价格


一、ES相关命令

PUT 类似于SQL中的增

DELETE 类似于SQL中的删

POST 类似于SQL中的改

GET 类似于SQL中的查


新增名为index_first索引库

PUT index_first

查询ES中所有的索引库

GET _cat/indices

删除名为index_first索引库

DELETE index_first

二、ES的CRUD操作

插入一条商品数据

product为库名,phone为表名,1为一条数据的id,不指定type默认为_doc。

PUT /product/phone/1
{
  "name" : "苹果14proMax",
  "desc" : "苹果手机双十一大促销,立减1000元!!!",
  "price" : "7999",
  "business" : "apple store",
  "tags" : ["shuma","dianzi"]
}

使用指定id查询商品数据

GET product/phone/1 

删除商品索引库

DELETE product

修改商品数据PUT方法(全局更新)

使用put方法就相当于将之前的数据删除,将新的数据添加上去 。

PUT /product/phone/1
{
  "desc" : "使用put修改之后的数据!"
}

修改商品数据POST方法(局部更新)

 使用POST方法只修改指定的字段

POST /product/phone/1/_update
{
  "doc" :{
    "desc" : "这是使用post修改的数据!"
  }
}

查看数据:

 

查看所有数据

相当与全表扫描

GET /product/_search

took:耗费了523毫秒

shards:分片的情况

hits:获取到的数据的情况

total: 总的数据条数

max_score:所有数据里面打分最高的分数

_index: "product"  index名称

_type: "phone"  type的名称

_id:"2" id号

_score: 分数,这个分数越大越靠前出来,也就是匹配度越高越靠前

再添加两条数据,用于后面的测试

PUT /product/phone/2
{
  "name" : "苹果14",
  "desc" : "苹果手机双十一大促销,立减1000元!!!",
  "price" : "4999",
  "business" : "apple store",
  "tags" : ["shuma","dianzi"]
}
PUT /product/phone/3
{
  "name" : "华为P40",
  "desc" : "华为手机双十一大促销,立减999元!!!",
  "price" : "5999",
  "business" : "huawei store",
  "tags" : ["shuma","dianzi"]
}

三、使用DSL语言

查询所有商品

使用match_all查询全部

GET /product/_search
{
  "query": {
    "match_all": {

    }
  }
}

条件查询

 使用match可进行模糊或精准查询

GET /product/_search
{
  "query": {
    "match": {
      "name" : "苹果14"
    }
  }
}

查询效果如下

 按照价格排序

        使用 sort ,排序字段为text类型的会报错,设置为keyword类型,这里在语法中设置,可以在创建的时候将属性设置为keyword类型。

GET /product/phone/_search
{
  "query": {
    "match": {
      "name" : "苹果14"
    }
  },
  "sort": [
    {
      "price.keyword": {
        "order": "desc"
      }
    }
  ]
}

效果如下,商品根据价格进行倒序排序: 

 实现分页查询

from 从第几页开始,size每页数据条数

GET /product/phone/_search
{
  "query": {
    "match": {
      "name" : "苹果14"
    }
  },
  "sort": [
    {
      "price.keyword": {
        "order": "desc"
      }
    }
  ],
  "from": 0,
  "size": 1
}

设置为从第0页开始,每页一条数据,效果如下图:

 

 返回指定字段的所有数据 

使用_source实现,他和query平级

GET /product/phone/_search
{
  "query": {
    "match_all": {
      
    }
  },
  "_source": ["name","price"]
}

只查出所有数据的名称和价格字段,效果如下:

 多个查询条件(bool  

 bool  过滤可以用来合并多个过滤条件查询结果的布尔逻辑,它包含以下操作符:
 must: 多个查询条件的完全匹配,相当于 and。
 must_not : 多个查询条件的相反匹配,相当于 not。
 should :至少有一个查询条件匹配, 相当于 or。
 这些参数可以分别继承一个过滤条件或者一个过滤条件的数组

操作:查询名称里带有苹果的,并且价格大于6000元的数据

GET /product/phone/_search
{
  "query": {
    "bool": {
      "must": [
        {
          "match": {
            "name" : "苹果"
          }
        }
      ],
      "filter": [
        {
          "range":{
            "price" : {
              "gt" : "6000"
            }
          }
        }
      ]
    }
  }
}

使用 filter 操作符进行过滤,它包含的操作符 range 代表范围,其中"gt"为大于号,"lt"为小于号,查询效果如下,只有一个数据,因为另一个名字带苹果的价格小于6000元:

 不分词,精确匹配(match_phrase)

操作:查询名字为苹果14的商品

GET /product/phone/_search
{
  "query": {
    "match_phrase": {
      "name": "苹果14"
    }
  }
}

如图,只查到了苹果14:

查询结果高亮显示 (highlight)

使用highlight,和query平级

查询名字中带苹果14的商品,并高亮显示

GET /product/phone/_search
{
  "query": {
    "match": {
      "name": "苹果14"
    }
  },
  "highlight": {
    "fields": {
      "name" : {}
    }
  }
}

高亮显示的字段会被<em></em>包裹,可以修改高亮显示的效果,查询结果如下:

 四、聚合分析

计算每个标签tag下商品的数量

terms 允许指定多个匹配条件,group_by_tag为自定义名称

注意:聚合的字段必须为keyword类型,如果是text类型的会报错

GET /product/phone/_search
{
  "aggs": {
    "group_by_tag": {
      "terms": {
        "field": "tags"
      }
    }
  }
}

效果如下

 查询商品名称里包含苹果的,并计算每个tags下商品的数量

GET /product/phone/_search
{
  "query": {
    "match": {
      "name": "苹果"
    }
  },
  "aggs": {
    "group_by_tag": {
      "terms": {
        "field": "tags"
      }
    }
  }
}

效果如下

 设置索引类型

为了防止因为不是keword类型进行聚合错做而报错,重新创建并设置类型

PUT /product2
{
  "mappings": {
    "properties": {
      "name":{
        "type":"text"
      },
      "price":{
        "type":"keyword"
      }
    }
  }
}

设置完类型之后,进行赋值,使用put方法,上面演示过了,这里跳过。

查看映射

GET product2/_mapping

查看刚刚创建的索引映射,效果如下,可以看到name的类型为text,price的类型为keword

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值