行业资讯 2025年08月6日
0 收藏 0 点赞 301 浏览 5307 个字
摘要 :

文章目录 什么是Elasticsearch全文搜索引擎 docker安装Elasticsearch 安装es Elasticsearch的基本查询 索引创建,查询,删除 创建文档,修改文档,删除文档, 创建文……




  • 什么是Elasticsearch全文搜索引擎
  • docker安装Elasticsearch
    • 安装es
  • Elasticsearch的基本查询
  • 索引创建,查询,删除
  • 创建文档,修改文档,删除文档,
    • 创建文档
    • 查看文档
    • 修改文档
    • 删除文档
    • 条件删除文档
  • 总结

什么是Elasticsearch全文搜索引擎

Elastic Stack是一个包括Elasticsearch、Kibana、Beats和Logstash(也称为ELK Stack)的技术栈。它能够安全可靠地获取各种来源和格式的数据,并实时进行搜索、分析和可视化。

其中,Elasticsearch(简称为ES)是整个Elastic Stack技术栈的核心。它是一个开源的高扩展性的分布式全文搜索引擎。ES可以近乎实时地存储和检索数据,具有良好的扩展性,可以扩展到上百台服务器,处理PB级别的数据。

传统的关系型数据库在全文检索方面的支持相对有限。对于非结构化的文本数据,如网页内容、应用日志等,传统数据库的全文检索功能性能较差。全文检索需要扫描整个表,即使对SQL语法进行优化,效果也有限。而且建立和维护索引也比较麻烦,对于插入和更新操作,需要重新构建索引。

因此,在一些生产环境中,使用传统的搜索方式性能不佳的情况包括:

  • 需要搜索大量非结构化文本数据的对象。
  • 文件记录数量达到数十万甚至数百万个甚至更多。
  • 需要支持大量基于交互式文本的查询。
  • 对全文搜索查询的需求非常灵活。
  • 对高度相关的搜索结果有特殊需求,但没有可用的关系数据库满足。
  • 需要处理不同记录类型、非文本数据操作或安全事务处理的需求较少。

为了解决结构化数据和非结构化数据的搜索性能问题,我们需要专业、健壮和强大的全文搜索引擎。全文搜索引擎通过扫描文章中的每个词,建立索引来进行搜索。当用户查询时,检索程序根据预先建立的索引进行查找,并将结果返回给用户。这类似于使用字典的检索字表查字的过程。

因此,Elastic Stack提供了强大的全文搜索引擎Elasticsearch,以满足对于大规模非结构化文本数据的高性能搜索和分析需求。

docker安装Elasticsearch

Spring Boot的版本号与Spring Data Elasticsearch的版本号是有关联的。您需要确保使用的Spring Data Elasticsearch版本与您的Spring Boot版本兼容。
这里我使用的是spring boot2.7.12,elasticsearch则使用7.17.3安装部署Elasticsearch7教程,演示简单查询方法

安装es

docker run --name es7 
-p 9200:9200 -p 9300:9300  
-e \"discovery.type=single-node\"  
-e ES_JAVA_OPTS=\"-Xms256m -Xmx256m\"  
-d elasticsearch:7.17.3
  • -d:后台启动
  • –name:容器名称
  • -p:端口映射
  • -e:设置环境变量

discovery.type=single-node:单机运行

如果启动不了,可以加大内存设置:-e ES_JAVA_OPTS=”-Xms512m -Xmx512m”

注意: es默认内存占用是1G以上,但是在平常测试使用中不会用这么大的,我们修改为256m者512m

进入容器修改config下的elasticsearch.yml配置,修改

cluster.name: \"docker-cluster\"
network.host: 0.0.0.0
http.cors.enabled: true
xpack.security.enabled: false
http.cors.allow-origin: \"*\"

进入容器安装ik分词器。默认分词不好用,在plugins下去下载ik分词器

elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.17.3/elasticsearch-analysis-ik-7.17.3.zip

上面步骤完成后重启 容器 docker restart 容器id

4.安装kibana界面,或者使用api工具软件等

docker run --name kibana 
 -e ELASTICSEARCH_HOSTS=http://esIP地址:9200 
 -p 5601:5601 -d kibana:7.17.3

进入容器修改config下的kibana.yml配置,重启容器

server.name: kibana
server.host: \"0\"
elasticsearch.hosts: [ \"http://esIP地址:9200\" ]
xpack.monitoring.ui.container.elasticsearch.enabled: true
i18n.locale: zh-CN

Elasticsearch的基本查询

索引创建,查询,删除

对比关系型数据库,创建索引就等同于创建数据库,索引(index)就是文档数据的开始,也必须要有索引。

在接口测试工具中,创建索引必须使用put请求,也就是http://ip地址:端口号/索引名称。

查看全部索引
GET _cat/indices?v   ?V可以查看更全的信息

创建索引
PUT index  注意:索引名不能参杂大写字母,可以写中文

删除索引
DELETE index

索引查询
GET index

查看索引对应头的含义

安装部署Elasticsearch7教程,演示简单查询方法

创建文档,修改文档,删除文档,

在Elasticsearch中,创建索引后,我们需要创建文档并添加数据。在这里,文档可以类比关系数据库中的表数据,而数据的格式通常采用JSON格式。为了创建文档并添加数据,我们可以使用POST和PUT请求。需要注意的是,POST请求不是幂等的,而PUT请求是幂等的。在这里,我们使用POST请求来创建文档。

这里我们创建文档的API格式为:IP地址:9200/索引名/_doc。其中,_doc表示创建文档的操作。使用POST请求创建文档时,必须提供一个JSON格式的请求体,否则会导致错误。

创建文档

post  http://localhost:9200/index/_doc
{
    \"name\":\"张三\",
    \"age\": 20
}
-----------------------------------------
{
    \"_index\": \"index\",
    \"_type\": \"_doc\",
    \"_id\": \"Qr5N1YkBmrPK3k6pyF3T\",
    \"_version\": 1,
    \"result\": \"created\",
    \"_shards\": {
        \"total\": 2,
        \"successful\": 1,
        \"failed\": 0
    },
    \"_seq_no\": 2,
    \"_primary_term\": 1
}

上面这种请求方式必须是post,也就是说请求没有指定明确的主键id,没有保证幂等性,所以不能使用put,但是下面这种就可以使用put,因为指定了id。

post/put  http://localhost:9200/index/_doc/1
{
    \"name\": \"张三\",
    \"age\": 20
}
----------------------------------
{
    \"_index\": \"index\",
    \"_type\": \"_doc\",
    \"_id\": \"1\",
    \"_version\": 1,
    \"result\": \"created\",
    \"_shards\": {
        \"total\": 2,
        \"successful\": 1,
        \"failed\": 0
    },
    \"_seq_no\": 3,
    \"_primary_term\": 1
}

查看文档

查询全部文档

GET  http://localhost:9200/index/_search
------------------------------------------
{
    \"took\": 837,
    \"timed_out\": false,
    \"_shards\": {
        \"total\": 1,
        \"successful\": 1,
        \"skipped\": 0,
        \"failed\": 0
    },
    \"hits\": {
        \"total\": {
            \"value\": 2,
            \"relation\": \"eq\"
        },
        \"max_score\": 1.0,
        \"hits\": [
            {
                \"_index\": \"index\",
                \"_type\": \"_doc\",
                \"_id\": \"1\",
                \"_score\": 1.0,
                \"_source\": {
                    \"name\": \"张三\",
                    \"age\": 20
                }
            },
            {
                \"_index\": \"index\",
                \"_type\": \"_doc\",
                \"_id\": \"2\",
                \"_score\": 1.0,
                \"_source\": {
                    \"name\": \"李四\",
                    \"age\": 20
                }
            }
        ]
    }
}

根据文档的唯一id查询文档

GET  http://localhost:9200/index/_doc/1
-----------------------------
{
    \"_index\": \"index\",
    \"_type\": \"_doc\",
    \"_id\": \"1\",
    \"_version\": 1,
    \"_seq_no\": 0,
    \"_primary_term\": 1,
    \"found\": true,
    \"_source\": {
        \"name\": \"张三\",
        \"age\": 20
    }
}

修改文档

全局修改

POST  http://localhost:9200/index/_doc/1
{
    \"name\":\"张大炮\",
    \"age\": 40,
    \"sex\": \"未知\",
    \"address\": \"轮回转世\"
}
-----------------------
{
    \"_index\": \"index\",
    \"_type\": \"_doc\",
    \"_id\": \"1\",
    \"_version\": 2,
    \"result\": \"updated\",  对一个文档中的id反复post请求,只会是updated
    \"_shards\": {
        \"total\": 2,
        \"successful\": 1,
        \"failed\": 0
    },
    \"_seq_no\": 2,
    \"_primary_term\": 1
}

上面这种指挥对这个文档中对应的id全部修改

修改字段

POST http://localhost:9200/index/_update/1
{
    \"doc\":{
        \"age\": 200
    }
}
-------------------------------
{
    \"_index\": \"index\",
    \"_type\": \"_doc\",
    \"_id\": \"1\",
    \"_version\": 3,
    \"result\": \"updated\",
    \"_shards\": {
        \"total\": 2,
        \"successful\": 1,
        \"failed\": 0
    },
    \"_seq_no\": 3,
    \"_primary_term\": 1
}

删除文档

DELETE http://localhost:9200/index/_doc/1
-----------------------------
{
    \"_index\": \"index\",
    \"_type\": \"_doc\",
    \"_id\": \"2\",
    \"_version\": 2,  对数据库的操作都会更新版本(前面我已经删除一个了)
    \"result\": \"deleted\",  删除一个不存在的文档显示  not_found
    \"_shards\": {
        \"total\": 2,
        \"successful\": 1,
        \"failed\": 0
    },
    \"_seq_no\": 6,
    \"_primary_term\": 1
}

条件删除文档

一般删除数据都是根据文档的唯一性标识进行删除,实际操作时,也可以根据条件对多条数据进行删除

POST  http://localhost:9200/index/_delete_by_query
{
    \"query\":{  查询
        \"match\":{   精确匹配
            \"category\": \"华为\"
        }
    }
}
--------------------------------
{
    \"took\": 7,
    \"timed_out\": false,  是否超时
    \"total\": 1,  删除后剩余总数
    \"deleted\": 1,  删除数量
    \"batches\": 1,
    \"version_conflicts\": 0,
    \"noops\": 0,
    \"retries\": {
        \"bulk\": 0,
        \"search\": 0
    },
    \"throttled_millis\": 0,
    \"requests_per_second\": -1.0,
    \"throttled_until_millis\": 0,
    \"failures\": []
}

总结

以上就是Elasticsearch7的安装步骤,以及实现简单查询的方法演示

微信扫一扫

支付宝扫一扫

版权: 转载请注明出处:https://www.zuozi.net/9001.html

管理员

相关推荐
2025-08-06

文章目录 一、Reader 接口概述 1.1 什么是 Reader 接口? 1.2 Reader 与 InputStream 的区别 1.3 …

988
2025-08-06

文章目录 一、事件溯源 (一)核心概念 (二)Kafka与Golang的优势 (三)完整代码实现 二、命令…

465
2025-08-06

文章目录 一、证明GC期间执行native函数的线程仍在运行 二、native线程操作Java对象的影响及处理方…

348
2025-08-06

文章目录 一、事务基础概念 二、MyBatis事务管理机制 (一)JDBC原生事务管理(JdbcTransaction)…

456
2025-08-06

文章目录 一、SnowFlake算法核心原理 二、SnowFlake算法工作流程详解 三、SnowFlake算法的Java代码…

517
2025-08-06

文章目录 一、本地Jar包的加载操作 二、本地Class的加载方法 三、远程Jar包的加载方式 你知道Groo…

832
发表评论
暂无评论

还没有评论呢,快来抢沙发~

助力内容变现

将您的收入提升到一个新的水平

点击联系客服

在线时间:08:00-23:00

客服QQ

122325244

客服电话

400-888-8888

客服邮箱

122325244@qq.com

扫描二维码

关注微信客服号