Elasticsearch --- 2. 常用操作

0.创建

PUT s1/doc/1
{
  "name":"张三",
  "age":"23",
  "sex":""
}

PUT s1/doc/2
{
  "name":"李四",
  "age":"30",
  "sex":""
}



PUT s1/doc/3
{
  "name":"小六",
  "age":"18",
  "sex":""
}


GET s1/doc/_search   #查询所有

GET s1/doc/1      #指定查询

 

 

1.两种条件查询方式

  ①字符串查询

GET s1/doc/_search?q=age:23

 

  ②结构化查询(DSL)


#1.match
GET s1/doc/_search { "query": { "match": { "age": "23" } } }


#2.match_all
GET s18/doc/_search   #查询所有
{
"query": {
"match_all": {}
}
}


#3.match_phrase (短语查询)

GET t1/doc/_search
{
  "query": {
    "match_phrase": {
      "title": {
        "query": "中国"
} } } }


②两个词组之间有了2个词的间隔
GET t1/doc/_search {
  "query": {
    "match_phrase": {
      "title": {
        "query": "中国世界",
        "slop": 2
} } } }



#4.
match_phrase_prefix(最左前缀查询)

GET t3/doc/_search {
  "query": {
    "match_phrase_prefix": {
      "desc": "bea"
} } }

#5.multi_match(多字段查询)(与must效果一致)

GET t3/doc/_search {
  "query": {
    "multi_match": {
      "query": "beautiful",
      "fields": ["title", "desc"]
} } }


 

2.修改指定字段

#只修改文档1中的 "age" ,其他不变

POST s1/doc/1/_update { "doc":{ "age":25 } }

 

3.排序sort

#降序

GET s1/doc/_search { "query": { "match_all": {} }, "sort": [ { "age": { "order": "desc" } } ] }

 

#升序

GET s1/doc/_search { "query": { "match_all": {} }, "sort": [ { "age": { "order": "asc" } } ] }

 

4.分页

#按索引从1的位置开始查,查2个

GET s1/doc/_search { "query": { "match_all": {} }, "from": 1, "size": 2 }

 

 

5.布尔查询:

  1.should(or),must(and),must_not(not)

#①查询姓名是"张三",或者年龄是"18"的

GET s1/doc/_search { "query": { "bool": { "should": [ { "match": { "name": "张三" } }, { "match": { "age": "18" } } ] } } }

 

#②查询出年龄是30的男性

GET s1/doc/_search { "query": { "bool": { "must": [ { "match": { "sex": "" } }, { "match": { "age": "30" } } ] } } }

 

#③查询出既不是男性,又不是30岁的

GET s1/doc/_search { "query": { "bool": { "must_not": [ { "match": { "sex": "" } }, { "match": { "age": "30" } } ] } } }

 

  2.大于(gt),大于等于(gte),小于(lt),小于等于(lte)

#①大于(其他类似)
查询大于25岁的男性

GET s1/doc/_search { "query": { "bool": { "must": [ { "match": { "sex": "" } } ], "filter": { "range": { "age": { "gt": 25 } } } } } }

 

#②查询小于25岁的非男性

GET s1/doc/_search { "query": { "bool": { "must_not": [ { "match": { "sex": "" } } ], "filter": { "range": { "age": { "lt": 25 } } } } } }

 

 

6.高亮查询


PUT s2/doc/1 { "name":"wangdi", "desc": "骚的打漂" } GET s2/doc/_search { "query": { "match": { "desc": "打漂" } }, "highlight": { #高亮显示查询的结果 "pre_tags": "<b style='color:red;font-size:20px;' class='wangdi'>", "post_tags": "</b>", "fields": { "desc": {} } } }

 

7.结果过滤

#①只将结果的姓名显示

GET s1/doc/_search { "query": { "match": { "name": "张三" } }, "_source": "name" }
#②将结果的姓名和年龄显示

GET s1/doc/_search { "query": { "match": { "name": "张三" } }, "_source": ["name","age"] }

 

8.聚合查询(sum,max,min,avg)

求男性的年龄总和

GET s1/doc/_search { "query": { "match": { "sex": "" } }, "aggs":{ "my_sum":{ "sum": { "field": "age" } } } }

 

求男性的最大值

GET s1/doc/_search { "query": { "match": { "sex": "" } }, "aggs":{ "my_max":{ "max": { "field": "age" } } } }

 

# 求所有人的平均值 avg
GET s1/doc/_search
{
  "aggs": {
    "my_avg": {
      "avg": {
        "field": "age"
      }
    }
  }
}

 

9.分组

#根据年龄,10-20,,20-30, 30-50 进行分组


GET s1/doc/_search { "aggs": { "my_group":{ "range": { "field": "age", "ranges": [ { "from": 10, "to": 20 }, { "from": 20, "to": 30 }, { "from": 30, "to": 50 } ] } } } }

 

对分组结果进行求和


GET s1/doc/_search { "aggs": { "my_group":{ "range": { "field": "age", "ranges": [ { "from": 10, "to": 20 }, { "from": 20, "to": 30 }, { "from": 30, "to": 50 } ] }, "aggs":{   "my_sum":{   "sum":{ "field":"age" } } } } } }

 

 

10.映射(mappings)

  自定义表结构

简单类型,如文本(text)、关键字(keyword)、日期(data)、整形(long)、
双精度(double)、布尔(boolean)或ip。
可以是支持JSON的层次结构性质的类型,如对象或嵌套。
或者一种特殊类型,如geo_point、geo_shape或completion。

 

  ①基本的映射(可添加新字段,es自动生成)

PUT s3
{
  "mappings": {
    "doc":{
      "properties":{
        "name":{
          "type":"text"
        },
          "age":{
            "type":"long"
          },
          "desc":{
            "type":"text"
          }
        }
      }
    }
}


GET s3/_mapping

GET s3

 

  ②dynamic的三种状态

#① true 状态(默认状态,可以添加新字段,可建立新映射关系,)

PUT s4 {
"mappings": { "doc":{ "dynamic": true, "properties":{ "name":{ "type":"text" } } } } }

 

 

② false 状态(可建立新字段,不能建立新的映射关系,不能做查询的条件,伴随主查询条件出现)

PUT s5 {
"mappings": { "doc":{ "dynamic": false, "properties":{ "name":{ "type":"text" } } } } }

 

 

 

③ strict 状态(严格类型,不可添加新字段)

PUT s6 {
"mappings": { "doc":{ "dynamic":"strict", "properties":{ "name":{ "type":"text" } } } } }

 

 

  ③ ignore_above(限制字节数)

超过时不能进行搜索(索引),但会插入数据

PUT s7 {
"mappings": { "doc":{ "properties":{ "title":{ "type":"keyword", "ignore_above": 10 } } } } }

 

  ④ index()

# true:可以对该字段(作为主查询)进行搜索  (默认)
# false: 不能对该字段作为搜索条件 进行搜索


PUT s8 {
"mappings": { "doc":{ "properties":{ "t1":{ "type":"text", "index": true }, "t2":{ "type":"text", "index": false } } } } }

 

  ⑤copy_to 复制属性

该属性允许我们将多个字段的值复制到组字段中,然后将组字段作为单个字段进行查询

 

建立映射

PUT s9 {
"mappings": { "doc":{ "properties":{ "t1":{ "type":"text", "copy_to":"full_name" }, "t2":{ "type":"text", "copy_to":"full_name" }, "full_name":{ "type":"text" } } } } }

 

插入数据

PUT s9/doc/1 { "t1":"xxx", "t2":"ooo" }

 

进行查询两种方式

GET s9/doc/_search { "query": { "match": { "t1": "xxx" } } } GET s9/doc/_search { "query": { "match": { "full_name": "xxx" } } }

 

  ⑥多层嵌套(内套在加peoperties)

PUT w1
{
  "mappings": {
    "doc":{
      "properties":{
        "name":{
          "type":"text"
        },
        "age":{
          "type":"long"
        },
        "info":{
          "properties":{
            "addr":{
              "type":"text"
            },
            "tel":{
              "type":"long"
            }
          }
        }
      }
    }
  }
}

 

插入数据

PUT w1/doc/2 { "name":"tom", "age":"18", "info":{ "addr":"北京", "tel":"10010" } }

 

查询嵌套的条件

GET w1/doc/_search { "query": { "match": { "info.tel": "10010" } } }

 

  ⑦settings(设置主,副分片)

PUT w2
{
  "mappings": {
    "doc":{
      "properties":{
        "title":{
          "type":"text"
        }
      }
    }
  }, 
  "settings": {
    "number_of_shards": 3,     #主
    "number_of_replicas": 3  #副
  }
}

 

posted @ 2019-05-21 18:04  TNTsc  阅读(793)  评论(0编辑  收藏  举报