🌟 一文掌握 《Elasticsearch:7.0 》

一、什么是Elasticsearch?

  • Elasticsearch是一个开源的搜索与分析引擎,它具备分布式和高扩展性的特性。在构建实时、可扩展的搜索和分析应用方面,Elasticsearch发挥了关键作用。其核心功能在于存储、搜索和分析海量的数据。

  • 为实现高效的全文搜索,Elasticsearch采用了倒排索引这一数据结构,这使得它能够高效地处理大量文本数据,并精准地返回与搜索查询相关的结果。不仅如此,Elasticsearch还支持丰富的查询语法和高级搜索功能,如模糊搜索、多字段搜索以及布尔搜索等,满足了复杂搜索场景的需求。

  • Elasticsearch具有实时处理数据的能力,能够提供近实时的搜索和分析服务。这一特性使得Elasticsearch能够应对不断变化的数据需求,确保搜索结果的时效性和准确性。

二、Elasticsearch (Window版) 安装

2.1 下载软件

elasticsearch-7.8.0-windows:百度网盘下载链接

elasticsearch-7.8.0-windows:官方下载链接

2.2 解压压缩包

tar -zxvf elasticsearch-7.8.0-windows-x86_64.zip

2.3 启动Elasticsearch

进入bin 文件夹,双击启动elasticsearch.bat

2.4 目录分析

三、Elasticsearch 语法学习

3.1 索引操作

① 创建索引

与关系型数据库相比比如Mysql, 创建索引类似于在Mysql创建数据库

用apifox 发送一个Put请求

http://127.0.0.1:9200/test

如果再发送一次同样的请求,则会出现索引已经存在的错误

如果请求的方式是Post也会报错

② 查看索引

用apifox 发送一个Get请求

http://127.0.0.1:9200/_cat/indices?v


③ 删除索引

用apifox 发送一个Delete请求

http://127.0.0.1:9200/test

3.2 文档操作

① 创建文档

用apifox 发送一个Post请求

http://127.0.0.1:9200/test/_doc

请求体内容为

json 复制代码
{
 "name":"小牛历险记",
 "number": 10,
 "prices": 10,
 "size": 20
}

上面的数据创建后,由于没有指定数据唯一性标识(ID),默认情况下,ES 服务器会随机 生成一个。

如果想要自定义唯一性标识,需要在创建时指定:

http://127.0.0.1:9200/test/_doc/1

如果增加数据时明确数据主键,那么请求方式也可以为 Put,否则只能使用Post请求

② 查看文档

我们新建一个明确id的文档

用apifox 发送一个Get请求

http://127.0.0.1:9200/test/_doc/1

如果需要查看该索引的所有文档可以输入

http://127.0.0.1:9200/test/_doc/_search

③ 修改文档

请求路径相同,请求体相同的更新数据,请求体没有数据直接丢失

如果只需要修个某一个字段可以发送一个Post请求:

http://127.0.0.1:9200/test/_doc/1

请求体为

{ "doc": { "name": "小牛牛牛" } }

④ 删除文档

删除文档时,系统并不会直接将其从磁盘物理空间中移除,而是采取一种逻辑删除的方式,即给文档打上已删除的标记。

发送一个Delete请求

http://127.0.0.1:9200/test/_doc/1

⑤条件查询

我们新增两个id不同,文档相同的

然后发送一个Get请求

http://127.0.0.1:9200/test/_doc/_search

请求体为

json 复制代码
{
    "query":{
        "match" :{
             "name": "小牛历险记"
        }
    }
}

如果需要查询所有的文档可以输入请求体为:

json 复制代码
{
    "query":{
        "match_all" :{
        }
    }
}

条件查询:分页查询:from ,size 只显示字段:_source 排序:sort

json 复制代码
{
    "query": {
        "match_all": {}
    },
    "from": 2,
    "size": 2,
    "_source": [
        "name"
    ],
    "sort": {
        "number": {
            "order": "desc"
        }
    }
}

条件查询: 且: must

json 复制代码
{
    "query": {
        "bool": {
            "must": [
                {
                    "match": {
                        "name": "小牛牛牛"
                    }
                },
                {
                    "match": {
                        "number": "10"
                    }
                }
            ]
        }
    }
}

条件查询:或 :should

json 复制代码
{
    "query": {
        "bool": {
            "should": [
                {
                    "match": {
                        "name": "小牛牛牛"
                    }
                },
                {
                    "match": {
                        "number": "10"
                    }
                }
            ]
        }
    }
}

条件查询:过滤:filter

json 复制代码
{
    "query": {
        "bool": {
            "should": [
                {
                    "match": {
                        "name": "小牛牛牛"
                    }
                },g
                {
                    "match": {
                        "number": "10"
                    }
                }
            ],
            "filter" :{
                "range" : {
                    "number" : {
                        "gt" : 50
                    }
                }
            }
        }
    }
}

条件查询: 完全匹配 :match_phrase

json 复制代码
{
    "query": {
        "match_phrase" : {
            "name" : "小黄"
        }
    }
}

条件查询: 高亮查询:highlight

json 复制代码
{
    "query": {
        "match_phrase": {
            "name": "小牛"
        }
    },
    "highlight": {
        "fields": {
            "name": {}
        }
    }
}

聚合操作 aggs

json 复制代码
{
    "aggs" : {
        "number_group" :{
            "terms" : {
                "field" : "number"
            }
        }
    },
    "size" : 0
}
json 复制代码
{
    "aggs" : {
        "number_avg" :{
            "avg" : {
                "field" : "number"
            }
        }
    },
    "size" : 0
}

3.3 关系映射

json 复制代码
{
    "properties": {
        "name": {
            "type": "text",
            "index": true
        },
        "price": {
            "type": "keyword",
            "index": true
        },
        "number": {
            "type": "keyword",
            "index": false
        }
    }
}

四、总结

本文深入剖析了Elasticsearch的安装、配置及其核心操作与语法。Elasticsearch以其强大的搜索分析功能,支持索引的创建与管理、文档的增删改查以及高效的查询分析和数据处理。通过深入学习和掌握其丰富的语法和功能,用户能够构建出高效且可扩展的数据处理应用,满足复杂多变的数据处理需求。

相关推荐
INFINI Labs13 分钟前
INFINI Console 纳管 Elasticsearch 9(一):指标监控、数据管理、DSL 语句执行
大数据·elasticsearch·搜索引擎·console
撸猫79134 分钟前
HttpSession 的运行原理
前端·后端·cookie·httpsession
嘵奇1 小时前
Spring Boot中HTTP连接池的配置与优化实践
spring boot·后端·http
镜舟科技1 小时前
湖仓一体架构在金融典型数据分析场景中的实践
starrocks·金融·架构·数据分析·湖仓一体·物化视图·lakehouse
Ramseyuu1 小时前
Mybatis-plus
微服务·云原生·架构
子燕若水1 小时前
Flask 调试的时候进入main函数两次
后端·python·flask
程序员爱钓鱼1 小时前
跳转语句:break、continue、goto -《Go语言实战指南》
开发语言·后端·golang·go1.19
charlie1145141912 小时前
内核深入学习3——分析ARM32和ARM64体系架构下的Linux内存区域示意图与页表的建立流程
linux·学习·架构·内存管理
Persistence___2 小时前
SpringBoot中的拦截器
java·spring boot·后端
嘵奇3 小时前
Spring Boot 跨域问题全解:原理、解决方案与最佳实践
java·spring boot·后端