🌟 一文掌握 《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以其强大的搜索分析功能,支持索引的创建与管理、文档的增删改查以及高效的查询分析和数据处理。通过深入学习和掌握其丰富的语法和功能,用户能够构建出高效且可扩展的数据处理应用,满足复杂多变的数据处理需求。

相关推荐
customer081 小时前
【开源免费】基于SpringBoot+Vue.JS周边产品销售网站(JAVA毕业设计)
java·vue.js·spring boot·后端·spring cloud·java-ee·开源
Yaml42 小时前
智能化健身房管理:Spring Boot与Vue的创新解决方案
前端·spring boot·后端·mysql·vue·健身房管理
小码编匠3 小时前
一款 C# 编写的神经网络计算图框架
后端·神经网络·c#
AskHarries3 小时前
Java字节码增强库ByteBuddy
java·后端
佳佳_4 小时前
Spring Boot 应用启动时打印配置类信息
spring boot·后端
Elastic 中国社区官方博客4 小时前
如何将数据从 AWS S3 导入到 Elastic Cloud - 第 3 部分:Elastic S3 连接器
大数据·elasticsearch·搜索引擎·云计算·全文检索·可用性测试·aws
掘金-我是哪吒4 小时前
微服务mysql,redis,elasticsearch, kibana,cassandra,mongodb, kafka
redis·mysql·mongodb·elasticsearch·微服务
许野平5 小时前
Rust: 利用 chrono 库实现日期和字符串互相转换
开发语言·后端·rust·字符串·转换·日期·chrono