条件查询
query:查询
match:匹配
match_all:匹配所有
#第一种
GET /shopping/_search?q=名字:张三
#第二种
GET /shopping/_search
{
"query": {
"match": {
"名字": "张三"
}
}
}
#全量查询 match_all
GET /shopping/_search
{
"query": {
"match_all": {
}
}
}
分页查询
from开始计算公式:(页码-1) * 每页数据条数
from:表示从第几行开始
size:表示查询多少条文档
#查询从0行开始
GET /shopping/_search
{
"query": {
"match_all": {
}
},
"from": 0,
"size": 2
}
#数据源过滤,只查找_source包含名字的行
GET /shopping/_search
{
"query": {
"match_all": {
}
},
"from": 0,
"size": 2,
"_source": ["名字"]
}
查询排序
order:排序
desc:降序
# 降序排序,按照年龄降序搜索名字
GET /shopping/_search
{
"query": {
"match_all": {
}
},
"_source": ["名字"],
"sort": {
"年龄":{
"order" : "desc"
}
}
}
多条件查询
bool:条件
must:类似and,必须 多条件同时成立
#条件同时成立,名字为张三和年龄为36岁
GET /shopping/_search
{
"query": {
"bool":{
"must": [
{
"match": {
"名字": "张三"
}
},
{
"match": {
"年龄": 36
}
}
]
}
}
}
should:查询类似or,或者
#条件为搜索名字为张三或李四
GET /shopping/_search
{
"query": {
"bool":{
"should": [
{
"match": {
"名字": "张三"
}
},
{
"match": {
"名字": "李四"
}
}
]
}
}
}
范围查询
filter:过滤
range:范围
gte:大于
lte:小于
#条件查询名字张三或李四年龄大于35岁到40岁之间
GET /shopping/_search
{
"query": {
"bool":{
"should": [
{
"match": {
"名字": "张三"
}
},
{
"match": {
"名字": "李四"
}
}
],
"filter": [
{
"range": {
"年龄": {
"gte": 35,
"lte": 40
}
}
}
]
}
}
}
全文检索
在es中,有文字的一部分也能正常查询到数据,es会将内容分词在倒排索引中匹配,比如“张三”,匹配“张”或者“三”都会进行匹配
GET /shopping/_search
{
"query": {
"match": {
"名字": "张"
}
}
}
GET /shopping/_search
{
"query": {
"match": {
"名字": "三"
}
}
}
完全匹配
match_phrase:完全匹配
GET /shopping/_search
{
"query": {
"match_phrase": {
"名字": "张三"
}
}
}
高亮查询
highlight:高亮字段
其实就是特殊的内容进行样式的设定
#对名字高亮显示
GET /shopping/_search
{
"query": {
"match_phrase": {
"名字": "张三"
}
},
"highlight": {
"fields": {
"名字": {}
}
}
}
聚合查询
aggs:聚合操作
#将所有年龄分组分别统计出来
GET /shopping/_search
{
"aggs":{ //聚合操作
"age_group": { //统计结果名称,命名随意
"terms": { //分组操作
"field": "年龄" //分组字段
}
}
}
}
GET /shopping/_search
{
"aggs":{ //聚合操作
"age_group": { //统计结果名称,命名随意
"terms": { //分组操作
"field": "年龄" //分组字段
}
}
},
"size": 0 //取消原始数据,只保留统计后数据
}
#统计结果为年龄的平均值
GET /shopping/_search
{
"aggs":{ //聚合操作
"age_agv": { //统计结果名称,命名随意,
"avg": { //分组操作
"field": "年龄" //分组字段
}
}
},
"size": 0
}
映射关系
properties:特性
sex:性别
keyword:关键字
#创建索引,并定义映射
PUT /user
PUT /user/_mapping
{
"properties" : {
"name" : {
"type" : "text",
"index" : true
},
"sex": {
"type" : "keyword", //关键字,完全匹配
"index" : true
},
"phone": {
"type": "keyword", //关键字,完全匹配
"index" : false
}
}
}
#user索引创建数据
PUT /user/_create/1001
{
"name": "小米",
"sex": "man",
"phone": 123456789
}
#查询name模糊匹配值存在,因为创建时type为text
GET /user/_search
{
"query": {
"match": {
"name": "小"
}
}
}
#查询sex模糊匹配值为空,因为创建时type为keyword
GET /user/_search
{
"query": {
"match": {
"sex": "ma"
}
}
}
#查询phone匹配为空,因为创建时index为false,不能被索引查询
GET /user/_search
{
"query": {
"match": {
"phone": "123456"
}
}
}