一.基础操作
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"
}
}
}
}
}
}