ElasticSearch的基本使用

ElasticSearch的基本使用

ElasticSearch和关系型数据库的区别

ElasticSearchMySQL
Index(索引)Database(数据库)
Type(类型)Table(表)
Document(文档)Row(行)
Fields(字段)Column(列)
  • ES里面的index可以看做一个库,而Type相当于表,Document就是每一行数据,Fields就是每一列的字段了。
  • Type的概念已经逐渐弱化,ElasticSearch 6.X中,一个index下已经只能包含一个type了。

索引操作

创建索引

向ES服务器发送put请求:http://localhost:9200/索引名

响应:

{
    "acknowledged": true,
    "shards_acknowledged": true,
    "index": "索引名"
}
  • 多次创建同一个index会报错
  • 发送post请求是不允许的

获取索引

向ES服务器发送get请求:http://localhost:9200/索引名

展示所有的索引
  • get: http://localhost:9200/_cat/indices?v

删除索引

向ES服务器发送delete请求:http://localhost:9200/索引名

文档数据的操作

添加文档数据

向ES服务去发送post请求:http://localhost:9200/索引名/_doc[/文档ID]

请求体数据:

{
    "title": "小米手机",
    "category": "小米",
    "images": "http:www.gulixueyuan.com/xm.jgp",
    "price": 3999.00
}
  • 不推荐使用索引ID,ES服务器会先去查询ID是否存在然后添加
  • 添加时发送post请求他不是幂等性的所以同样的请求体多次请求会产出多条数据
  • 添加事如果发送的是put请求,一点要带上ID,put请求是幂等性的,还可以使用`http://localhost:9200/索引名/_create/ID

修改文档数据

全量修改

向ES服务器发送put请求:http://localhost:9200/_doc/ID(全量修改数据是幂等性的所以可以使用put请求)

请求体数据:

{
    "title": "小米手机10",
    "category": "小米",
    "images": "http:www.gulixueyuan.com/xm.jgp",
    "price": 4999.00
}
局部修改

向ES服务器发送post请求:http://localhost:9200/索引名/_update/ID(局部修改数据不是幂等性所以使用post请求)

请求体数据:

{
    "doc":{  // 表示对文档进行修改
        "title": "华为手机"  // 修改字段:修改内容
    }
}

查询文档数据

向ES服务器发送get请求:http://localhost:9200/索引名/_doc/ID(查询单独的文档)

向ES服务器发送get请求:http://localhost:9200/索引名/_search(查询所有的文档)

删除数据

向ES服务器发送delete请求:http://localhost:9200/索引名/_doc/ID

  • 多次删除就是not_found

查询

条件查询

请求方式:get

通过查询参数完成条件查询
  • url: http://localhost:9200/索引名/_search?q=查询字段:查询条件
通过请求体完成条件查询
  • url: http://localhost:9200/索引名/_search

    请求体数据:

    • match匹配查询

      {
          "query": {  // 表示查询
              "match":{  // 匹配查询
                  "查询字段":"查询条件"
              }
          }
      }
      
    • match_phrase完全匹配查询

      {
          "query": {  // 表示查询
              "match_phrase":{  // 完全匹配查询
                  "查询字段":"查询条件"
              }
          }
      }
      
    • match_all全量查询

      {
          "query": {  // 表示查询
              "match_all":{  // 全量查询
              
              }
          }
      }
      
    • highlight查询显示高亮

      {
          "query": {  // 表示查询
              "match_phrase":{  // 匹配查询
                  "查询字段":"查询条件"
              }
          },
          "highlight": {  // 高亮
              "fields": {   // 高亮字段
                  "匹配显示高亮字段": {}
              }
          }
      }
      
    • aggs聚合操作

      • 分组

        {
            "aggs": {  // 聚合操作
                "统计结果名称": {  // 统计结果名称,随意起名没有特殊含义
                    "terms": {  // 分组
                        "field": "聚合操作的字段"  // 分组字段
                    }
                }
            },
            "size": 0 // 不显示原始数据
        }
        
        
      • 平均值

        {
            "aggs": {  // 聚合操作
                "统计结果名称": {  // 统计结果名称,随意起名没有特殊含义
                    "avg": {  // 平均值
                        "field": "聚合操作的字段"  // 平均值字段
                    }
                }
            },
            "size": 0 // 不显示原始数据
        }
        
        
    • from/size分页查询

      {
          "query": {  // 表示查询
              "match_all":{  // 全量查询
              
              }
          },
          "from": 0,  // 起始位置
          "size": 2,  // 查询条数
      }
      
      
    • _source显示字段

      {
          "query": {  // 表示查询
              "match_all":{  // 全量查询
              
              }
          },
          "from": 0,  // 起始位置
          "size": 2,  // 查询条数
          "_source": ["字段1""字段2"...]  // 结果显示的字段
      }
      
      
    • sort排序

      {
          "query": {  // 表示查询
              "match_all":{  // 全量查询
              
              }
          },
          "from": 0,  // 起始位置
          "size": 2,  // 查询条数
          "_source": ["字段1""字段2"...],  // 结果显示的字段
          "sort": {  // 排序
              "price": {   // 排序字段
                  "order": "desc/asc"  // 排序方式:降序、升序
              }
          }
      }
      
      

多条件查询

多条件同时满足
  • url: http://localhost:9200/索引名/_search

    请求体数据:

    • must同时满足

      {
          "query": {
              "bool": {  // 布尔值
                  "must": [  // 多个条件同时满足 相当于and
                      {
                          "macth": { // 匹配查询
                              "查询字段1": "查询条件1"
                      	}   
                      }{
                          "macth": {
                          "查询字段2": "查询条件2" 		
                      	} 
                      }
                  ]
              }
          }
      }
      
      
    • should满足其中一个

      {
          "query": {
              "bool": {  // 布尔值
                  "should": [  // 多个条件同时满足 相当于or
                      {
                          "macth": { // 匹配查询
                              "查询字段1": "查询条件1"
                      	}   
                      }{
                          "macth": {
                          	"查询字段1": "查询条件2" 		
                      	} 
                      }{
      					 "macth": {
                          	"查询字段2": "查询条件2" 		
                      	} 
                  	}
                  ]
              }
          }
      }
      
      
    • filter范围查询

      {
          "query": {
              "bool": {  // 布尔值
                  "should": [  // 多个条件同时满足 相当于or
                      {
                          "macth": { // 匹配查询
                              "查询字段1": "查询条件1"
                      	}   
                      }
                  ],
                  "filter": {  // 过滤
                      "range": {  // 范围
                          "需查询范围的字段": {  // 指定字段
                              "gt": 5000   // gt:大于  lt: 小于  gte:大于等于  lte: 小于等于
                          }
                      }
                  }
              }
          }
      }
      
      
  • 保存文档数据是ES会将数据文字进行分词、拆解操作,并将拆解后的数据集保存到倒排索引之中,这样我们即使使用文字的一部分可以查询到数据,这个检索方式就是全文检索

映射关系

创建文档的数据类型(映射)

向ES服务器发送put请求创建一个新的索引:http://localhost:9200/新索引名/_mapping(表示映射关系)

请求体数据:

{
    "properties": {  // 属性
        "name": {  // 指定字段
            "type": "text",  // 文本类型支持分词
            "index": true  // 可被索引查询
        },
        "gender": {
        	"type": "keyword",  // 关键词不可以被分词
        	"index": true
    	},
        "tel": {
            "type": "keyword",
            "index": false   // 不可被索引查询
        }
    }
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值