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

相关推荐
米羊12121 分钟前
Struts 2 漏洞(上)
java·后端·struts
梵得儿SHI44 分钟前
Spring Cloud 实战攻坚:企业级用户服务开发(注册登录 + JWT 认证 + 权限控制)
后端·spring·spring cloud·用户注册与登录·jwt无状态认证体系·rbac权限控制·微服务用户中心
Tadas-Gao1 小时前
基于规范驱动开发的下一代软件工程范式:从理论到实践
驱动开发·架构·系统架构·大模型·llm·软件工程
海兰2 小时前
Elasticsearch 9.3.0 RAG Playground 指南
大数据·elasticsearch·搜索引擎
御坂10101号3 小时前
从暴力扫图到成本估算:SpiceDB 如何重构 ReBAC 性能引擎
算法·性能优化·架构·database
xinhuanjieyi4 小时前
python获取股票分红
chrome·python·elasticsearch
黄俊懿4 小时前
【架构师从入门到进阶】第一章:架构设计基础——第一节:架构设计的目的
架构·系统架构·架构设计
callJJ5 小时前
Spring Bean 生命周期详解——从出生到销毁,结合源码全程追踪
java·后端·spring·bean·八股文
怒放吧德德5 小时前
AsyncTool + SpringBoot:轻量级异步编排最佳实践
java·后端
毅炼5 小时前
Java 集合常见问题总结(1)
java·后端