ElasticSearch自学笔记

es学习内容

day01

概念区别

Mysql和es概念对比

ElasticSearch自学笔记_第1张图片

  • mysql:擅长事务类型的操作,可以确保数据的安全和一致性
  • ES:擅长海量数据的搜索,分析和计算

mapping 属性

ElasticSearch自学笔记_第2张图片

  • 创建index的时候值为true就是参与搜索

索引库修改

PUT /库名/_mapping
字段名必须是新字段名

文档操作,新增文档

ElasticSearch自学笔记_第3张图片

文档操作,删除文档

ElasticSearch自学笔记_第4张图片

修改文档

  1. 全量修改

ElasticSearch自学笔记_第5张图片

  1. 增量修改

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指定聚合字段

你可能感兴趣的:(elasticsearch,笔记,android)