ElasticSearch自学笔记

本文涉及的产品
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
简介: 个人es自学笔记

es学习内容

day01

概念区别

Mysql和es概念对比

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

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

mapping 属性

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

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

索引库修改

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

文档操作,新增文档

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

文档操作,删除文档

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

修改文档

  1. 全量修改

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

  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实现地理位置查询
本实验将分别介绍如何使用Elasticsearch7.10版本进行全文检索、多语言检索和地理位置查询三个Elasticsearch基础检索子场景的实现。
ElasticSearch 入门精讲
ElasticSearch是一个开源的、基于Lucene的、分布式、高扩展、高实时的搜索与数据分析引擎。根据DB-Engines的排名显示,Elasticsearch是最受欢迎的企业搜索引擎,其次是Apache Solr(也是基于Lucene)。 ElasticSearch的实现原理主要分为以下几个步骤: 用户将数据提交到Elastic Search 数据库中 通过分词控制器去将对应的语句分词,将其权重和分词结果一并存入数据 当用户搜索数据时候,再根据权重将结果排名、打分 将返回结果呈现给用户 Elasticsearch可以用于搜索各种文档。它提供可扩展的搜索,具有接近实时的搜索,并支持多租户。
相关文章
|
19天前
|
安全
【Elasticsearch6】安装笔记
【Elasticsearch6】安装笔记
15 2
|
2月前
|
关系型数据库 MySQL 索引
|
2月前
|
前端开发 Java iOS开发
elasticsearch8.1源码编译笔记
elasticsearch8.1源码编译笔记
83 0
|
JSON 安全 搜索推荐
白日梦的Elasticsearch实战笔记,32个查询案例、15个聚合案例、7个查询优化技巧(一)
白日梦的Elasticsearch实战笔记,32个查询案例、15个聚合案例、7个查询优化技巧(一)
703 0
|
Java 数据库 Docker
Elasticsearch笔记
Elasticsearch笔记
128 0
Elasticsearch笔记
|
存储 Web App开发 搜索推荐
Elasticsearch笔记(集群插件、kibana、什么是倒排索引)
Elasticsearch笔记(集群插件、kibana、什么是倒排索引)
Elasticsearch笔记(集群插件、kibana、什么是倒排索引)
Elasticsearch核心技术与实战-极客课程笔记
Elasticsearch核心技术与实战-极客课程笔记
408 0
Elasticsearch核心技术与实战-极客课程笔记
|
搜索推荐
ElasticSearch笔记
ElasticSearch笔记
121 0
ElasticSearch笔记
|
JSON 安全 Java
白日梦的Elasticsearch实战笔记,ES账号免费借用、32个查询案例、15个聚合案例、7个查询优化技巧。(一)
白日梦的Elasticsearch实战笔记,ES账号免费借用、32个查询案例、15个聚合案例、7个查询优化技巧。(一)
231 0
|
存储 负载均衡 算法
白日梦的ES笔记三:万字长文 Elasticsearch基础概念统一扫盲(三)
白日梦的ES笔记三:万字长文 Elasticsearch基础概念统一扫盲(三)
162 0