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+请求体)
- 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"]//返回的字段
}
- 匹配查询(match)
全文检索用match,非全文检索用term
//精确查询
GET /bank/_search
{
"query": {
"match": {
"account_number": "20"
}
}
}
//模糊查询
{
"query": {
"match": {
"address": "mill lane"//字符串
//"address.keyword": "mill lane"精确匹配
}
}
}
使用match后我们变可以看到最大得分这个属性有值了!
模糊查询时,得分就不一样了!查询结果也会按评分由高到低进行排序.
- 匹配查询(match_phrase短语匹配 )
GET /bank/_search
{
"query": {
//match_phrase:将mill lane看做一个单词进行匹配
"match_phrase": {
"address": "mill lane"
}
}
}
- 多字段匹配
//查询"address","city"中包含"mill"的记录
GET /bank/_search
{
"query": {
"multi_match": {
"query": "mill",
"fields": ["address","city"]
}
}
}
- 复合查询
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