es学习内容
day01
概念区别
Mysql和es概念对比
- mysql:擅长事务类型的操作,可以确保数据的安全和一致性
- ES:擅长海量数据的搜索,分析和计算
mapping 属性
- 创建index的时候值为true就是参与搜索
索引库修改
PUT /库名/_mapping
字段名必须是新字段名
文档操作,新增文档
文档操作,删除文档
修改文档
- 全量修改
- 增量修改
RestClient
查询语法的分类
1条件查询
GET /hotel/_search
{
"query": {
"match_all": {}
}
}
2全文检索
实际上是一种相关度的匹配
match
GET /hotel/_search
{
"query": {
"match": {
"all": "如家"
}
}
}
multi_match:与match查询相似,只不过允许同时擦汗寻多个字段
GET /hotel/_search
{
"query": {
"multi_match": {
"query": "外滩如家"
, "fields": ["brand","name","business"]
}
}
}
推荐使用match字段来查询
3精确查询
- term 根据词条的精确值的查询(不再进行分词)
GET /hotel/_search
{
"query": {
"term": {
"city": {
"value":"上海"
}
}
}
}
- range 根据值的范围查询
- gte大于等于gt只有大于
GET /hotel/_search
{
"query": {
"range": {
"price": {
"gte": 100,
"lte": 300
}
}
}
}
4地理查询
- distance查询
# distance查询
GET /hotel/_search
{
"query": {
"geo_distance":{
"distance":"2km",
"location":"31.21,121.5"
}
}
}
适用于经纬度的信息
DSL查询语法,加分方式
# function score查询
GET /hotel/_search
{
"query": {
"function_score": {
"query": {
"match": {
"all": "外滩"
}
}
, "functions": [
{
"filter": {
"term": {
"brand": "如家"
}
},
"weight": 10
}
]
, "boost_mode": "sum"
}
}
}
查询案例
要求名字包含如家,价格不高于400的,在坐标31.21.121.5周围10km范围内的酒店
- must必须匹配的条件,可以理解为与
- should选择性匹配的条件,或
- must_not必须不匹配的条件,不参与打分
- filter必须匹配的条件,不参与打分
GET /hotel/_search
{
"query": {
"bool": {
"must": [
{
"match": {
"name": "如家"
}
}
],
"must_not": [
{
"range": {
"price": {
"gt": 400
}
}
}
],
"filter": [
{
"geo_distance": {
"distance": "10km",
"location": {
"lat": 31.21,
"lon": 121.5
}
}
}
]
}
}
}
排序
对酒店数据按照用户评价降序排序,评价相同的按照价格升序排列
# sort 排序
GET /hotel/_search
{
"query": {
"match_all": {}
},
"sort": [
{
"score": "desc"
},
{
"price": "asc"
}
]
}
找到周围的酒店
GET /hotel/_search
{
"query": {
"match_all": {}
},
"sort": [
{
"_geo_distance": {
"location": {
"lat": 31.11111,
"lon": 121.11111
},
"order": "asc"
, "unit": "km"
}
}
]
}
分页
- from+size 支持随机翻页,深度分页问题默认查询上线from+size是10000
- after search 没有查询上限,没有随机翻页的项目需求,如手机向下滚动翻页
# 分页查询
GET /hotel/_search
{
"query": {
"match_all": {}
},
"from": 10,
"size": 10,
"sort": [
{
"price": {
"order": "asc"
}
}
]
}
数据聚合
aggs代表数据的聚合
# 聚合功能,限制聚合范围
GET /hotel/_search
{
"query": {
"range": {
"price": {
"lte": 200
}
}
},
"size": 0,
"aggs":{
"brandAgg":{
"terms": {
"field": "brand",
"size": 20,
"order": {
"_count": "asc"
}
}
}
}
}
聚合的三要素
- 聚合名称
- 聚合类型
- 聚合字段
size指定聚合结果的数量
order指定聚合的排序方式
field指定聚合字段