elasticsearch的简单使用

导读:本篇文章讲解 elasticsearch的简单使用,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

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官方文档

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/96845.html

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!