elasticsearch的简单使用

elasticsearch如何像MySQL一样进行简单的增删改查等操作呢?

customer即为索引(对应MySQL数据库)
external为类型(对应MySQL数据库数据库中的表)
1为id(数据库表中的id)
//put
http://192.168.56.10:9200/customer/external/1

如图,put请求,在携带id的情况下,多次发起请求,他会覆盖之前的id值,多次发起请求后,_version版本号会不断叠加;
在这里插入图片描述

//POST请求
http://192.168.56.10:9200/customer/external/

如图,已post方式发请求时,如果不指定id,它会帮我们自动生成id
在这里插入图片描述

//delete请求
http://192.168.56.10:9200/customer/external/1

put请求或者post请求
乐观锁修改:
每修改一次,_seq_no就会自动叠加,导致其他请求必须重新查一次_seq_no,拿到正确的_seq_no,才能完成修改
_primary_term:主分片重新分配,如重启就会发生变化

//put请求
http://192.168.56.10:9200/customer/external/1?_seq_no=1&if_primary_term=1

带上_update就修改主体就必须带上doc,这两种写法的区别是: 带DOC的首先会判断该条数据内容是否与修改的内容一致,若一致,则不做任何操作 (与原来数据进行对比)

//post请求
POST customer/external/1/_update
{
	"doc":
	{"name":"zhangsan"}
	
}
//而这种不会对比原来数据,直接发请求修改
POST customer/external/1
{
	{"name":"zhangsan"}
	
}

//get请求
http://192.168.56.10:9200/customer/external/1

批量操作

POST /customer/external/_bulk
{"index":{"_id":"1"}}
{"name":"John Don"}
{"index":{"_id":"2"}}
{"name":"John Don"}

took:执行这些操作所花的世界
errors:false,这些操作全部成功
items:每条记录的执行状态
在这里插入图片描述

进阶检索

ES支持2中方式得检索

  • 通过REST request url 发送搜索参数(url+搜索参数)
  • 通过REST request body(url+请求体)
  1. REST request url 发送搜索参数(url+搜索参数)
//q=*: 查询bank索引下的所有数据
//sort=account_number:asc查出数据按照account_number进行升序拍列
GET /bank/_search?q=*&sort=account_number:asc
  • _shards:解释在集群情况下每个分片都为检索做了什么事情
  • hits:命中的记录.查询到的结果

在这里插入图片描述
ES官方文档
具体各个属性的作用参考官方文档
测试数据
以下代码均以测试数据为基础!
2. REST request body(url+请求体)

//query:查询条件
//sort:排序条件 
GET /bank/_search
{
  "query": { "match_all": {} },
  "sort": [
    { 
    	"account_number": "asc" 
    },
     {
      "balance": "desc"
    }
  ],
   "from": 10,//从第10条记录开始查询
  "size": 10,//查10条记录
  "_source": ["balance","firstname"]//返回的字段
}
  1. 匹配查询(match)
    全文检索用match,非全文检索用term
//精确查询
GET /bank/_search
{
  "query": {
    "match": {
      "account_number": "20"
    }
  }
}
//模糊查询
{
  "query": {
    "match": {
      "address": "mill lane"//字符串
      //"address.keyword": "mill lane"精确匹配
    }
  }
}

使用match后我们变可以看到最大得分这个属性有值了!
模糊查询
模糊查询时,得分就不一样了!查询结果也会按评分由高到低进行排序.

  1. 匹配查询(match_phrase短语匹配 )
GET /bank/_search
{
  "query": {
  //match_phrase:将mill lane看做一个单词进行匹配
    "match_phrase": {
      "address": "mill lane"
    }
  }
}
  1. 多字段匹配
//查询"address","city"中包含"mill"的记录
GET /bank/_search
{
  "query": {
    "multi_match": {
      "query": "mill",
      "fields": ["address","city"]
    }
  }
}
  1. 复合查询
GET /bank/_search
{
  "query": {
    "bool": {
      "must": [
        { "match": { "age": "40" } }
      ],
      "must_not": [
        { "match": { "state": "ID" } }
      ]
    }
  }
}

filter与match类似,但filter不会叠加相关性得分!
更多高级查询请看ES官方文档

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值