ElasticSearch安装和简单使用
ElasticSearch
ES安装
Linux下安装ES,
-
下载:官网下载想要的版本的安装包(.tar.gz),上传到指定目录里,解压,
-
修改配置文件:修改
./elasticsearch-7.16.1/config
目录下的elasticsearch.yml
配置文件- network.host: 0.0.0.0 表示任何IP都可以访问,实际开发中会设置为具体的IP
elasticsearch.yml
,ES的配置文件;jvm.options
,ES的JVM配置文件;log4j2.properties
,ES的日志配置文件;
-
启动:进入
./elasticsearch-7.16.1/bin
下,以user-es用户启动es,su user-es ./elasticsearch
.(如果以root用户启动会报错) -
检查:使用postman访问
http://192.168.1.244:9200/
,如果返回以下信息证明本机可以访问服务器的es了。{ "name": "poc-2", "cluster_name": "elasticsearch", "cluster_uuid": "x3o3mnyAQW2nOsbByCTdPw", "version": { "number": "7.16.1", "build_flavor": "default", "build_type": "tar", "build_hash": "5b38441b16b1ebb16a27c107a4c3865776e20c53", "build_date": "2021-12-11T00:29:38.865893768Z", "build_snapshot": false, "lucene_version": "8.10.1", "minimum_wire_compatibility_version": "6.8.0", "minimum_index_compatibility_version": "6.0.0-beta1" }, "tagline": "You Know, for Search" }
ES的基本概念
ES是基于Lucene的搜索服务器,它提供了一个分布式多用户能力的全问搜索引擎,且ES支持RestFulweb风格的url访问。ES是基于Java开发的开源搜索引擎,设计用于云计算,能够达到实时搜索,稳定、可靠、快速。此外,ES还提供了数据聚合分析功能,但在数据分析方面,es的时效性不是很理想,在企业应用中一般还是用于搜索。ES自2016年起已经超过Solr等,成为排名第一的搜索引擎应用。
ES的特性
速度快、易扩展、弹性、灵活、操作简单、多语言客户端、X-Pack、hadoop/spark强强联手、开箱即用。
- 分布式:横向扩展非常灵活
- 全文检索:基于lucene的强大的全文检索能力;
- 近实时搜索和分析:数据进入ES,可达到近实时搜索,还可进行聚合分析
- 高可用:容错机制,自动发现新的或失败的节点,重组和重新平衡数据
- 模式自由:ES的动态mapping机制可以自动检测数据的结构和类型,创建索引并使数据可搜索。
- RESTful API:JSON + HTTP
基本概念
ES中有几个基本概念:索引(index)、类型(type)、文档(document)、映射(mapping)等。我们将这几个概念与传统的关系型数据库中的库、表、行、列等概念进行对比,如下表:
关系型数据库 | ES |
---|---|
数据库 database | 索引 index |
表 table | 类型 type (ES6.0之后被废弃,es7中完全删除) |
表结构 schema | 映射 mapping |
行 row | 文档 document |
列 column | 字段 field |
索引 | 反向索引 |
SQL | 查询DSL |
select * from table | get http://... |
update table set | PUT http://... |
DELETE | DELETE http://...... |
倒排索引
一个文档,首先被分词为多个关键字,每个关键字有一个编号。然后,建立文档与关键字的映射关系。最后,检索的时候根据关键字本身做索引排序。
索引
索引是ES的一个逻辑存储,对应关系型数据库中的库,ES可以把索引数据存放到服务器中,也可以sharding(分片)后存储到多台服务器上。每个索引有一个或多个分片,每个分片可以有多个副本。
文档
存储在ES中的主要实体叫文档,可以理解为关系型数据库中表的一行数据记录。每个文档由多个字段(field)组成。区别于关系型数据库的是,ES是一个非结构化的数据库,每个文档可以有不同的字段,并且有一个唯一标识。
映射
映射是对索引库中的索引字段及其数据类型进行定义,类似于关系型数据库中的表结构。ES默认动态创建索引和索引类型的mapping,这就像是关系型数据中的,无需定义表机构,更不用指定字段的数据类型。当然也可以手动指定mapping类型。
ES集群的概念
集群
一个ES集群由多个节点(node)组成, 每个集群都有一个共同的集群名称 (./elasticsearch-7.16.1/config/elasticsearch.yml中的cluster.name设置)做为标识
节点
一个es实例即为一个节点,一台机器可以有多个节点,正常使用下每个实例都应该会部署在不同的机器上。ES的配置文件中可以通过node.master、 node.data 来设置节点类型
- node.master: true/false 表示节点是否具有成为主节点的资格
- node.data: true/false 表示节点是否为存储数据
node节点的组合方式:
- 主节点+数据节点: 默认方式,节点既可以作为主节点,又存储数据
- 数据节点: 节点只存储数据,不参与主节点选举
- 客户端节点: 不会成为主节点,也不存储数据,主要针对海量请求时进行负载均衡
分片 shard
如果我们的索引数据量很大,超过硬件存放单个文件的限制,就会影响查询请求的速度,ES引入了分片技术。一个分片本身就是一个完成的搜索引擎,文档存储在分片中,而分片会被分配到集群中的各个节点中,随着集群的扩大和缩小,ES会自动的将分片在节点之间进行迁移,以保证集群能保持一种平衡。分片有以下特点:
- ES的一个索引可以包含多个分片(shard);
- 每一个分片(shard)都是一个最小的工作单元,承载部分数据;
- 每个shard都是一个lucene实例,有完整的简历索引和处理请求的能力;
- 增减节点时,shard会自动在nodes中负载均衡(可配置);
- 一个文档只能完整的存放在一个shard上
- 一个索引中含有shard的数量,默认值为5,在索引创建后这个值是不能被更改的。
- 优点:水平分割和扩展我们存放的内容索引;分发和并行跨碎片操作提高性能/吞吐量;
- 每一个shard关联的副本分片(replica shard)的数量,默认值为1,这个设置在任何时候都可以修改。
副本 replica
副本(replica shard)就是shard的冗余备份,它的主要作用:
- 冗余备份,防止数据丢失;
- shard异常时负责容错和负载均衡;
使用
要先创建索引 put,在创建post mapping映射,然后再post 插入数据,
curl -POST IP:9200/索引名称/索引类型/_mapping?pretty -d '{
索引类型: {
"properties": {
"title": {
"type": "text",
"store": "true"
},
"description": {
"type": "text",
"index": "false"
},
"price": {
"type": "double"
},
"onSale": {
"type": "boolean"
},
"type": {
"type": "integer"
},
"createDate": {
"type": "date"
}
}
}
}'
{
"title": "test title 001",
"description": "this is a random desc ",
"price": 22.6,
"onSale": "true",
"type": 2,
"createDate": "2018-01-12"
}
或者直接插入数据,通过指定文档id插入数据。
curl -PUT IP:9200/索引名称/索引类型/文档ID -d '{
"title": "test title 003",
"description": "this is a random desc ",
"price": 22.6,
"onSale": "true",
"type": 2,
"createDate": "2018-01-12"
}'
参考
本文来自博客园,作者:永恒&,转载请注明原文链接:https://www.cnblogs.com/Sun-yuan/p/17398292.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?