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 #副
}
}