Elasticsearch 基本操作+高级查询

本示例elasticsearch版本7.1,之前的版本请勿参考

API基本格式 http://<ip>:<port>/<索引>/<类型>/<文档id>

常用HTTP动词 GET/POST/PUT/DELETE

 

代码参考:

Elasticsearch 基本操作(CURD)PHP类

 

创建索引

    请求地址:127.0.0.1:9200/索引名

    请求方法:PUT

    请求内容:

{
	"settings":{
		"number_of_shards": 3,
		"number_of_replicas": 1
	},
	"mappings":{
		"properties":{
			"name":{
				"type":"text"
			},
			"country":{
				"type":"keyword"
			},
			"age":{
				"type":"integer"
			},
			"date":{
				"type":"date",
				"format":"yyyy-MM-dd HH:mm:ss||yyyy-MM-dd||epoch_millis"
			}
		}
	}
}

给指定索引添加category字段

    请求地址:127.0.0.1:9200/索引名/_mapping

    请求方法:PUT

    请求内容:

{
	"properties":{
		"category":{
			"type":"text"
		}
	}
}

插入

    请求地址:127.0.0.1:9200/索引名/_doc

    请求方法:POST

    请求内容:

{
"name":"张三",
"age":24,
"date":"2019-06-17 11:12:36",
"country":"中国"
}

修改

    请求地址:127.0.0.1:9200/索引名/_doc/1/_update

    请求方法:POST

    请求内容:

方法1
{
	"doc":{
		"name":"李四"
	}
}

方法2
{
	"script":{
		"lang":"painless",
		"inline":"ctx._source.age += 10"
	}
}
方法3
{
	"script":{
		"lang":"painless",
		"inline":"ctx._source.age = params.age",
		"params":{
			"age":100
		}
	}
}

删除

    请求地址:127.0.0.1:9200/索引名/_doc/1

    请求方法:DELETE

    请求内容:

根据id查询一条

    请求地址:127.0.0.1:9200/索引名/_doc/1

    请求方法:GET

查询

    请求地址:127.0.0.1:9200/索引名/_search

    请求方法:POST

    请求内容:

//查询该索引中的所有数据
{
	"query":{
		"match_all":{}
	}
}
//根据name字段模糊查询
{
	"query":{
		"match":{
			"name":"鬼剑士"
		}
	}
}
//根据name字段模糊查询并根据kucun字段降序显示
{
	"query":{
		"match":{
			"name":"故事"
		}
	},
	"sort":{
		"kucun":{"order":"desc"}
	}
}
//根据kucun字段分组 (group by) 想查询多个字段分组就往group_by_kucun后面添加
{
	"aggs":{
		"group_by_kucun":{
			"terms":{
				"field":"kucun"
			}
		}
	}
}
//计算数据常用聚合函数    ps:如果只需要某个聚合函数就把stats关键字替换成需要的聚合函数
{
	"aggs":{
		"kucun_count":{
			"stats":{
				"field":"kucun"
			}
		}
	}
}

计算数据常用聚合函数示例

高级查询(Query Context)

     请求地址:127.0.0.1:9200/索引/_search

     请求方法:POST

     请求内容:

//模糊匹配name字段中含 "爱情故事合集" 的一条数据
{
	"query":{
		"match_phrase":{
			"name":"爱情故事合集"
		}
	}
}
//在type、name字段中模糊匹配有 "爱情" 关键字的数据
{
	"query":{
		"multi_match":{
			"query":"爱情",
			"fields":["type","name"]
		}
	}
}
//在整个索引中搜索内容有 "垃圾" 和 "合集" 的数据或者有 "悬疑" 的数据(模糊匹配)
{
	"query":{
		"query_string":{
			"query":"(垃圾 and 合集) or 悬疑"
		}
	}
}
//在type、name字段中模糊匹配 "垃圾" 或者 "悬疑" 的数据
{
	"query":{
		"query_string":{
			"query":"垃圾 or 悬疑",
			"fields":["type","name"]
		}
	}
}
//查询库存字段等于600的数据
{
	"query":{
		"term":{
			"kucun":600
		}
	}
}
//查询kucun >=350 and kucun <= 600 之间的数据
// gte  >=
// lte  <=
// gt   >
// lt   <
//如果拿时间做查询 now 就是当前时间的意思
{
	"query":{
		"range":{
			"kucun":{
				"gte":350,
				"lte":600
			}
		}
	}
}

高级查询(Filter Context)

     请求地址:127.0.0.1:9200/索引/_search

     请求方法:POST

     请求内容:

//查询kucun字段等于350的数据
{
	"query":{
		"bool":{
			"filter":{
				"term":{
					"kucun":350
				}
			}
		}
	}
}

Filter 除了和 Query语法上有点区别以外 Filter 内部也会做一些缓存,所以Filter比Query更快一些

高级查询(复合查询)

     请求地址:127.0.0.1:9200/索引/_search

     请求方法:POST

     请求内容:

//模糊匹配name字段中存在 "故事" 的数据并赋予_score值为2
{
	"query":{
		"constant_score":{
			"filter":{
				"match":{
					"name":"故事"
				}
			},
			"boost":2
		}
	}
}
//模糊匹配name字段中存在 "鬼剑士" 或者 kucun字段中 等于600的数据    
//ps:(在integer的字段match是等于的意思)
{
	"query":{
		"bool":{
			"should":[
				{
					"match":{
						"name":"鬼剑士"
					}
				},
				{
					"match":{
						"kucun":600
					}
				}
			]
		}
	}
}
//模糊匹配name字段中的有 "鬼剑士" 并且 kucun字段等于 350 
//如果查询出来的数据是多条filter过滤只取kucun字段等于350的数据
{
	"query":{
		"bool":{
			"must":[
				{
					"match":{
						"name":"鬼剑士"
					}
				},
				{
					"match":{
						"kucun":350
					}
				}
			],
			"filter":[
				{
					"term":{
						"kucun":350
					}
				}
			]
		}
	}
}
//查询type字段不等于 "垃圾" 的所有数据
{
	"query":{
		"bool":{
			"must_not":{
				"term":{
					"type":"垃圾"
				}
			}
		}
	}
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值