当前位置:   article > 正文

ElasticSearch语法_es创建index

es创建index

目录

一、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。

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

使用指定id查询商品数据

GET product/phone/1 

删除商品索引库

DELETE product

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

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

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

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

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

  1. POST /product/phone/1/_update
  2. {
  3.   "doc" :{
  4.     "desc" : "这是使用post修改的数据!"
  5.   }
  6. }

查看数据:

 

查看所有数据

相当与全表扫描

GET /product/_search

took:耗费了523毫秒

shards:分片的情况

hits:获取到的数据的情况

total: 总的数据条数

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

_index: "product"  index名称

_type: "phone"  type的名称

_id:"2" id号

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

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

  1. PUT /product/phone/2
  2. {
  3. "name" : "苹果14",
  4. "desc" : "苹果手机双十一大促销,立减1000元!!!",
  5. "price" : "4999",
  6. "business" : "apple store",
  7. "tags" : ["shuma","dianzi"]
  8. }
  9. PUT /product/phone/3
  10. {
  11. "name" : "华为P40",
  12. "desc" : "华为手机双十一大促销,立减999元!!!",
  13. "price" : "5999",
  14. "business" : "huawei store",
  15. "tags" : ["shuma","dianzi"]
  16. }

三、使用DSL语言

查询所有商品

使用match_all查询全部

  1. GET /product/_search
  2. {
  3. "query": {
  4. "match_all": {
  5. }
  6. }
  7. }

条件查询

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

  1. GET /product/_search
  2. {
  3. "query": {
  4. "match": {
  5. "name" : "苹果14"
  6. }
  7. }
  8. }

查询效果如下

 按照价格排序

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

  1. GET /product/phone/_search
  2. {
  3. "query": {
  4. "match": {
  5. "name" : "苹果14"
  6. }
  7. },
  8. "sort": [
  9. {
  10. "price.keyword": {
  11. "order": "desc"
  12. }
  13. }
  14. ]
  15. }

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

 实现分页查询

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

  1. GET /product/phone/_search
  2. {
  3. "query": {
  4. "match": {
  5. "name" : "苹果14"
  6. }
  7. },
  8. "sort": [
  9. {
  10. "price.keyword": {
  11. "order": "desc"
  12. }
  13. }
  14. ],
  15. "from": 0,
  16. "size": 1
  17. }

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

 

 返回指定字段的所有数据 

使用_source实现,他和query平级

  1. GET /product/phone/_search
  2. {
  3. "query": {
  4. "match_all": {
  5. }
  6. },
  7. "_source": ["name","price"]
  8. }

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

 多个查询条件(bool  

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

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

  1. GET /product/phone/_search
  2. {
  3. "query": {
  4. "bool": {
  5. "must": [
  6. {
  7. "match": {
  8. "name" : "苹果"
  9. }
  10. }
  11. ],
  12. "filter": [
  13. {
  14. "range":{
  15. "price" : {
  16. "gt" : "6000"
  17. }
  18. }
  19. }
  20. ]
  21. }
  22. }
  23. }

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

 不分词,精确匹配(match_phrase)

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

  1. GET /product/phone/_search
  2. {
  3. "query": {
  4. "match_phrase": {
  5. "name": "苹果14"
  6. }
  7. }
  8. }

如图,只查到了苹果14:

查询结果高亮显示 (highlight)

使用highlight,和query平级

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

  1. GET /product/phone/_search
  2. {
  3. "query": {
  4. "match": {
  5. "name": "苹果14"
  6. }
  7. },
  8. "highlight": {
  9. "fields": {
  10. "name" : {}
  11. }
  12. }
  13. }

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

 四、聚合分析

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

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

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

  1. GET /product/phone/_search
  2. {
  3. "aggs": {
  4. "group_by_tag": {
  5. "terms": {
  6. "field": "tags"
  7. }
  8. }
  9. }
  10. }

效果如下

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

  1. GET /product/phone/_search
  2. {
  3. "query": {
  4. "match": {
  5. "name": "苹果"
  6. }
  7. },
  8. "aggs": {
  9. "group_by_tag": {
  10. "terms": {
  11. "field": "tags"
  12. }
  13. }
  14. }
  15. }

效果如下

 设置索引类型

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

  1. PUT /product2
  2. {
  3. "mappings": {
  4. "properties": {
  5. "name":{
  6. "type":"text"
  7. },
  8. "price":{
  9. "type":"keyword"
  10. }
  11. }
  12. }
  13. }

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

查看映射

GET product2/_mapping

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/518841
推荐阅读
相关标签
  

闽ICP备14008679号