elasticsearch基本操作(更新)

介绍之前首先看一下es的字段类型:https://blog.csdn.net/chengyuqiang/article/details/79048800

核心数据类型: 

       text、byte、short、integer、long、float、double、boolean、date

复合数据类型

     array、object

注意:新版本es不支持string类型,支持text

index_ml:索引(相当于关系数据库中的数据库)

type_ml:类型(相当于关系数据库中的表)

(一)简单创建索引

http://10.10.129.21:9200/index_ml/type_ml/1   post请求

{

"name":"zs",

"age":22

}

查看我们的映射:

http://10.10.13.21:9200/index_ml/_mapping?pretty    post请求

 

(二)增加字段

想在已经建好的索引上增加字段

http://10.10.13.21:9200/index_ml/_mapping/type_ml   post请求

{
    "type_ml":{
        "properties":{
            "job":{
                "type":"text",
                "analyzer":"english"
            },
            "time":{
                "type":"date"
               
            }
        }
    }
}

(三)修改某个字段的值

http://10.10.13.21:9200/index_ml/type_ml/1/_update   post请求

{
    "doc":{
        "name":"lisi"
    }
}

(四)增加一条数据

http://10.10.13.21:9200/index_ml/type_ml/2  post请求

{
    "doc":{
        "name":"zl",
        "sex":"男",
        "age":28,
        "time":"2019-06-25T13:40:00"
    }
}

 


 

(五)查询(查询语句比较冗余,但是是个查询语句框架,仅供参考指正)

 

es查询基本模板:from=0,size=0.将不会查询出文档,可以在不需要输出指定文档的情况下仅仅获得聚合结果

{
    "query":{
        "bool":{
            "must":[
                {
                    "match_all":{

                    }
                }
            ],
            "must_not":[

            ],
            "should":[

            ]
        }
    },
    "from":0,
    "size":100,
    "aggs":{

    }
}

(1)全文搜索文档name为"ma"的字段

{"query":{"bool":{"must":[{"query_string":{"query":"name:ma"}}],"must_not":[],"should":[]}},"from":0,"size":100,"aggs":{}}

(2)所有文档根据性别这个字段聚合

{"query":{"bool":{"must":[{"match_all":{}}],"must_not":[],"should":[]}},"aggs":{"field_define_by_youself":{"terms":{"field":"sex"}}}}

(3)去重 :cardinality   

去重性别:

{"query":{"bool":{"must":[{"match_all":{}}]}},"from":0,"size":0,"aggs":{"quchong_by_sex":{"cardinality":{"field":"sex"}}}}

(4)匹配搜索

{"query":{"bool":{"must":[{"match":{"hobby":"climb mountain"}}]}},"from":0,"size":10,"aggs":{}}

(5) 通配符查询   *代表多个字符,?代表一个字符

 

(6)根据范围查询

说明:#控制范围

#range 查询:范围查询

##有from,to,include_lower,include_upper,boost 这些参数

## include_lower: 是否包含范围的左边界,默认是true

##include_upper: 是否包含范围的右边界,默认是true

{"query":{"bool":{"must":[{"range":{"date":{"include_lower":true,"include_upper":true,"from":"2017-07-01","to":"2018-01-11","time_zone":"+08:00"}}}]}}} 

其中date为文档中的时间字段

(7) 按照或年或月或日进行统计一段时间范围内文档的数量

date_histogram是按照时间来构建集合(桶)Buckts的,当我们需要按照时间进行做一些数据统计的时候,就可以使用它来进行时间维度上构建指标分析  

参考文档:https://www.cnblogs.com/xing901022/p/4951603.html

interval字段支持多种关键字:`year`, `quarter`, `month`, `week`, `day`, `hour`, `minute`, `second`

在2017-01-01到2018-01-13这段时间内,按照月份进行聚合查询

{"query":{"bool":{"must":[{"range":{"date":{"include_lower":true,"include_upper":true,"from":"2017-01-01","to":"2018-01-13","time_zone":"+08:00"}}}]}},"aggs":{"juhe":{"date_histogram":{"field":"date","interval":"month","format":"yyyy/MM/dd"}}}}

可以看到2017年一月有6片文档,2018年一月有一篇文档(上图没有截全)

(8)term匹配

主要用于精确匹配哪些值,比如数字,日期,布尔值或 not_analyzed 的字符串(未经分析的文本数据类型)

{"query":{"bool":{"must":[{"term":{"sex":"女"}}],"must_not":[{"term":{"name":" "}}],"should":[{"range":{"age":{"from":20,"to":30}}}]}},"aggs":{}}

我们看到,should条件里的age范围20-30,但是返回结果依然有age为35的数据,但是score得分仅仅为0.35,相关性不如上图中第一条数据大,如果想真正把35这个年龄数据的人过滤出去,需要把range条件写进must里:

{"query":{"bool":{"must":[{"term":{"sex":"女"}},{"range":{"age":{"gte":20,"to":30}}}],"must_not":[{"term":{"name":"yu"}}],"should":[]}},"aggs":{}}

(9)terms匹配

terms 跟 term 有点类似,但 terms 允许指定多个匹配条件。 如果某个字段指定了多个值,那么文档需要一起去做匹配

{"query":{"bool":{"must":[{"terms":{"name":["ll","yu"]}}],"must_not":[],"should":[]}},"aggs":{}}

(10)exists 和 missing

exists 和 missing 过滤可以用于查找文档中是否包含指定字段或没有某个字段,类似于SQL语句中的IS_NULL条件

https://www.jianshu.com/p/7a5d706336f1

{"query":{"bool":{"must":[{"missing":{"field":"name1"}}],"must_not":[],"should":[]}},"aggs":{}}

exists:过滤文档中字段。文档中没有该字段,或字段值为null,或多值字段为[]不能被返回,多值字段值(字段所对应的是个数组等)不是全为null可以返回

missing为exits的逆。

(11)高亮

{"query":{"wildcard":{"hobby":"play*"}},"highlight":{"pre_tags":["h1"],"post_tags":["/h1"],"fields":{"hobby":{"type":"plain"}}}}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值