ElasticSearch语句

一.基础操作

1.索引

1.创建索引
#简单创建
PUT /index
#标准创建
PUT /index      //index为索引名
{
  "settings": {
    "number_of_shards": 5,  //分片数,创建后不能修改
    "number_of_replicas": 1  //备份数量
  }
}

2.查看索引配置
#单个索引
GET /index/_settings
#全部
GET _all/_settings

3.删除索引
#语法:DELETE /index
DELETE /lib

2.简单文档操作

1.创建文档
#指定id用put方法
//语法:index/type/id
PUT /index/type/id
{
  "first_name" : "Jane",
  "last_name" : "Smith",
  "age" : 32,
  "about" : "I like to collect rokalbums",
  "interests" : ["music"]
}
#不指定id使用post方法
//语法:index/type
POST /index/type/
{
  "first_name" : "Douglas",
  "last_name" : "Fir",
  "age" : 17,
  "about" : "I like to fygh",
  "interests" : ["forestry"]
}

2.查询文档
#查看单个   语法get /index/type/id
GET /lib/user/1
#只查看具体几个字段 语法:get /index/type/id?_source=fields1,fields2
GET /lib/user/1?_source=age,about

3.更新文档
POST /index/type/id/_update
{
  "doc": {
    "age" : 23
  }
}

4.删除文档
DELETE /lib/user/1

二、批量操作

1.MultiGet批量获取相同索引、类型的

1.批量获取基本操作
GET /_mget
{
"docs":[
    {
      "_index" : "lib",
      "_type" : "user",
      "_id": "1",
      "_source" : ["age","about"]  //可以指定字段
    },
    {
      "_index" : "lib",
      "_type" : "user",
      "_id": "2"
    },
    {
      "_index" : "lib",
      "_type" : "user",
      "_id": "3"
    }
  ]
}

2.精简操作
GET /index/type/_mget
{
"docs":[
  {
    "_id" : "1",
    "_source" : ["age","about"]
  } , 
  {
    "_id" : "2"
  } , 
  {
    "_id" : "3"
  } 
  ]
}

3.最简操作
GET /index/type/_mget
{
  "ids": ["1","2","3"]
}

2.Bulk实现批量操作

1.批量添加
#语法
POST /index/type/_bulk
.....

#实例
##其中index指创建或替换新文档,create表示文档不存在时创建
POST /index/type/_bulk
{"index":{"_id" : "4"}}
{ "first_name":"Jane4","last_name" : "Smith4"}
{"index":{"_id" : "5"}}
{ "first_name" : "Jane5","last_name" : "Smith5"}

#混合批量操作
POST /lib/user/_bulk
{"index":{"_id" : "5"}}  //创建或替换
{ "first_name":"Jane5","last_name" : "Smith5"}
{"create":{"_id" : "6"}}  //文档不存在时创建
{ "first_name" : "Jane6","last_name" : "Smith6"}
{"update":{"_index":"lib","_type":"user","_id":"3"}}  //修改
{"doc":{"age":44}}
{"delete":{"_index":"lib","_type":"user","_id":"1"}}  //删除

三、文档中的数据类型

#查看mapping(数据类型)
GET /index/type/_mapping  //查看文档数据类型

#手动创建索引的数据类型
PUT /lib3
{
  "settings": {
    "number_of_shards": 5,  //设置分片数
    "number_of_replicas": 1  //设置备份数
  },
  "mappings": {
    "user":{
      "properties":{
          "name":{"type":"text","analyzer":"standard"},  //指定text类型,设置standard分词器
          "publish:date":{"type":"date","index":false},    //指定date类型,不创建倒排索引
          "price":{"type":"double"},
          "number":{"type":"integer"}
      }
    }
  }
}

四、复杂条件查询

1.查field=value的并按field2排序  
#语法: get /index/type/_search?q=field:value&sort=field2:desc
GET /index/type/_search?q=name:"hg"&sort=age:desc


2.terms查询语法   field包含的value
#terms没有分词器
GET /index/type/_search
{
  "from": 0,   //从第一个开始
  "size": 1,   //取一个
  "version": true,   //显示版本好
  "_source": "{field1,field2}"  //只显示field1,field2字段
  "query":{
    "terms": {
        "field": [
          "value1",
          "value2"
        ]
    }
  },
"sort": [  //排序
    {
      "FIELD": {
        "order": "desc"
      }
    }
  ]
  "_source": {
    "includes": "{field}"  //设置显示的字段
    ,"excludes": "{field}"  //设置不显示的字段
  }  
}

3.match查询  field包含的value1或者value2的
#特点:能够分词
GET /index/type/_search
{
  "query":{
    //"match_all":{}  //查询所有
    "match": {
      "field": "value1 value2"
    }
  }
}

4.multi_match  field1或者field2中包含的value的
GET /index/type/_search
{
  "query":{
    "multi_match": {
      "query": "value", 
      "fields": ["field1","field2"]
    }
  }
}

5.match_phrase查询短语
GET /lib/doc/_search
{
  "query":{
    "match_phrase": {
      "field": "value"  //value指多个单词组成的短语
    }
  }
}

6.match_phrase_prefix前缀匹配
GET /lib/doc/_search
{
  "query":{
    "match_phrase_prefix": {
      "field": "chang"  //查询chang*
    }
  }
}

7.range查询在某范围之间
GET /lib/doc/_search
{
  "query":{
    "range": {
      "field": {
        "gte": 18,      //大于等于
        "lte": 20        //加e代表等于
      }
    }
  }
}

8.wildcard允许通配符查询
GET /lib/doc/_search
{
  "query":{
    "wildcard": {
      "field": {
        "value": "chang*",    //*表示匹配0个或者多个的字符
        "value": "chang?e"  //?一个字符
      }
    }
  }
}

9.fuzzy模糊查询
#字符中间缺少值都能查询出来,查询结果高亮显示
GET /lib/doc/_search
{
  "query":{
    "fuzzy": {
      "field": {
        "value": "change"
      }
    }
  },
  "highlight": {  //指定字段高亮显示
    "fields": {
      "field": {}
    }
  }
}

10.filter过滤查询
#查询field为value1或者value2(注意:默认text类型分词数据为小写)
GET /index/type/_search
{
  "query": {
    "bool": {
      "filter": {
        "term": {
          "FIELD": "VALUE"
        },   //或
        "terms": {
          "FIELD": [
            "VALUE1",
            "VALUE2"
          ]
        }
      }
    }
  }
}

11.bool过滤查询
#must  --  and
#should  --  or
#must_not -- not
GET /indx/type/_search
{
  "query": {
    "bool": {
      "must": [    #两个条件同时满足
        { 
            "term": {
            "FIELD": "VALUE"
          }
        },{
         "term": {
            "FIELD": "VALUE"
          }
        }
      ],
      "should": [
        {}
      ], 
      "must_not": [
        {}
      ]
    }
  }
}

12.过滤不为空的字段
GET /lib/user/_search
{
  "query": {
    "bool": {
      "filter": {
        "exists": {
          "field": "FIELD_NAME"
        }
      }
    }
  }
}

五、聚合查询

1.常见函数(sum、avg、min、max如下语法)
GET /index/type/_search
{
  "size": 0,   //只显示结果
  "aggs":{
    "name":{  //自己取名字
      "sum":{  //选择聚合方式
        "field":"field"  //字段
      }
    }
  }
}

2.cardinality求奇数
GET /index/type/_search
{
  "size": 0,   //只显示结果
  "aggs":{
    "name":{  //自己取名字
      "cardinality":{  //cardinality求奇数
        "field":"field"  //字段
      }
    }
  }
}

3.terms分组
GET /index/type/_search
{
  "size": 0,   //只显示结果
  "aggs":{
    "name":{  //自己取名字
      "terms":{  //terms分组
        "field":"field"  //字段
      }
    }
  }
}

4.综合实例
#查询FIELD中含要text,按field2分组,再算出field的平均数按平均数排序
GET /lib/user/_search
{
  "size": 0, 
  "query": {
    "match": {
      "FIELD": "TEXT"
    }
  },
  "aggs": {
    "NAME1": {
      "AGG_TYPE": {  //terms
        "field":"field2",
        "order": {
          "NAME2": "asc"  //name2是下面取的名字
        }
      },
      "aggs": {
        "NAME2": {
          "AGG_TYPE": {  //avg
            "field": "field3"
          }
        }
      }
    }
  }
}
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,826评论 6 506
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,968评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,234评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,562评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,611评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,482评论 1 302
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,271评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,166评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,608评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,814评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,926评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,644评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,249评论 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,866评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,991评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,063评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,871评论 2 354

推荐阅读更多精彩内容