• ElasticSearch自学笔记


    es学习内容

    day01

    概念区别

    Mysql和es概念对比

    外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

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

    mapping 属性

    外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

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

    索引库修改

    PUT /库名/_mapping
    字段名必须是新字段名
    
    • 1
    • 2

    文档操作,新增文档

    外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

    文档操作,删除文档

    外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

    修改文档

    1. 全量修改

    外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

    1. 增量修改

    RestClient

    查询语法的分类

    1条件查询

    GET /hotel/_search
    {
      "query": {
        "match_all": {}
      }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    2全文检索

    实际上是一种相关度的匹配

    match

    GET /hotel/_search
    {
      "query": {
        "match": {
          "all": "如家"
        }
      }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    multi_match:与match查询相似,只不过允许同时擦汗寻多个字段

    GET /hotel/_search
    {
      "query": {
        "multi_match": {
          "query": "外滩如家"
          , "fields": ["brand","name","business"]
        }
      }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    推荐使用match字段来查询

    3精确查询

    • term 根据词条的精确值的查询(不再进行分词)
    GET /hotel/_search
    {
      "query": {
        "term": {
          "city": {
              "value":"上海"
          }
        }
      }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • range 根据值的范围查询
    • gte大于等于gt只有大于
    GET /hotel/_search
    {
      "query": {
        "range": {
          "price": {
            "gte": 100,
            "lte": 300
          }
        }
      }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    4地理查询

    • distance查询
    # distance查询
    GET /hotel/_search
    {
      "query": {
        "geo_distance":{
          "distance":"2km",
          "location":"31.21,121.5"
        }
      }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    适用于经纬度的信息

    DSL查询语法,加分方式

    # function score查询
    GET /hotel/_search
    {
      "query": {
        "function_score": {
          "query": {
            "match": {
              "all": "外滩"
            }
          }
          , "functions": [
            {
              "filter": {
              "term": {
              "brand": "如家"
            }
            }, 
            "weight": 10 
            }
            
          ]
          , "boost_mode": "sum"
        }
      }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25

    查询案例

    要求名字包含如家,价格不高于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  
                }  
              }  
            }  
          ]  
        }  
      }  
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34

    排序

    对酒店数据按照用户评价降序排序,评价相同的按照价格升序排列

    # sort 排序
    GET /hotel/_search
    {
      "query": {
        "match_all": {}
      },
      "sort": [
        {
          "score": "desc"
        },
        {
          "price": "asc"
        }
      ]
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    找到周围的酒店

    GET /hotel/_search
    {
      "query": {
        "match_all": {}
      },
      "sort": [
        {
          "_geo_distance": {
            "location": {
              "lat": 31.11111,
              "lon": 121.11111
            },
            "order": "asc"
            , "unit": "km"
          }
        }
      ]
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    分页

    • from+size 支持随机翻页,深度分页问题默认查询上线from+size是10000
    • after search 没有查询上限,没有随机翻页的项目需求,如手机向下滚动翻页
    # 分页查询
    GET /hotel/_search
    {
      "query": {
        "match_all": {}
      },
      "from": 10,
      "size": 10, 
      "sort": [
        {
          "price": {
            "order": "asc"
          }
        }
      ]
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    数据聚合

    aggs代表数据的聚合

    # 聚合功能,限制聚合范围
    GET /hotel/_search 
    {
      "query": {
        "range": {
          "price": {
            "lte": 200
          }
        }
      }, 
      "size": 0,
      "aggs":{
        "brandAgg":{
          "terms": {
            "field": "brand",
            "size": 20,
            "order": {
              "_count": "asc"
            }
          }
        }
      }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23

    聚合的三要素

    • 聚合名称
    • 聚合类型
    • 聚合字段

    size指定聚合结果的数量

    order指定聚合的排序方式

    field指定聚合字段

  • 相关阅读:
    shell 截取最后一个参数及字符截取
    C语言学习(五)之循环
    Excel打开后关闭就马上跳出 Visual c++ Runtime Error R6025
    TypeScript内置类型有哪些?
    珂学送分
    配置FTP站点操作步骤—图解
    基于PLE结合卡尔曼滤波的RSSI定位算法matlab仿真
    多元函数的二阶泰勒展开推导
    【HMS Core】集成多种HMS Core服务,让APP成为旅行小助手
    55.【Java 线程】
  • 原文地址:https://blog.csdn.net/giaogege666/article/details/133303768