赞
踩
参考2:Ubuntu上安装ElasticSearch_ubuntu elasticsearch-CSDN博客
1.1安装JDK,省略,之前已安装过
1.2创建ES用户
- 创建用户:sudo useradd esuser
- 设置密码:sudo passwd esuser
1.3 下载ElasticSearch安装包
Ubuntu上下载:
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.11.1-linux-x86_64.tar.gz
然后解压:
tar -xvzf elasticsearch-7.11.1-linux-x86_64.tar.gz
1.4配置
配置jvm.options
vi config/jvm.options
配置elasticsearch.yml:
- node.name: node-1 #配置当前es节点名称(默认是被注释的,并且默认有一个节点名)
- cluster.name: my-application #默认是被注释的,并且默认有一个集群名
- path.data: /home/lighthouse/es/data # 数据目录位置
- path.logs: /home/lighthouse/es/logs # 日志目录位置
- network.host: 0.0.0.0 #绑定的ip:默认只允许本机访问,修改为0.0.0.0后则可以远程访问cluster.initial_master_nodes: ["node-1", "node-2"] #默认是被注释的 设置master节点列表 用逗号分隔
根据以上设置的path.data和path.logs内容,需要在/home/lighthouse/目录下创建es目录,以及在es目录下创建文件data和logs。
ElasticSearch的配置信息:
属性名 说明
cluster.name 配置elasticsearch的集群名称,默认是elasticsearch。建议修改成一个有意义的名称。
node.name 节点名,es会默认随机指定一个名字,建议指定一个有意义的名称,方便管理
path.conf 设置配置文件的存储路径,tar或zip包安装默认在es根目录下的config文件夹,rpm安装默认在/etc/ elasticsearch
path.data 设置索引数据的存储路径,默认是es根目录下的data文件夹,可以设置多个存储路径,用逗号隔开
path.logs 设置日志文件的存储路径,默认是es根目录下的logs文件夹
path.plugins 设置插件的存放路径,默认是es根目录下的plugins文件夹
bootstrap.memory_lock 设置为true可以锁住ES使用的内存,避免内存进行swap
network.host 设置bind_host和publish_host,设置为0.0.0.0允许外网访问
http.port 设置对外服务的http端口,默认为9200。
transport.tcp.port 集群结点之间通信端口
discovery.zen.ping.timeout 设置ES自动发现节点连接超时的时间,默认为3秒,如果网络延迟高可设置大些
discovery.zen.minimum_master_nodes 主结点数量的最少值 ,此值的公式为:(master_eligible_nodes / 2) + 1 ,比如:有3个符合要求的主结点,那么这里要设置为2
1.5 修改/etc/security/limits.conf文件 增加配置
sudo vi /etc/security/limits.conf
在文件最后,增加如下配置:
- * soft nofile 65536
- * hard nofile 65536
在/etc/sysctl.conf文件最后添加一行 vm.max_map_count=655360 添加完毕之后,执行命令: sysctl -p
- vi /etc/sysctl.conf
- vm.max_map_count=655360
- sysctl -p
1.6启动ElasticSearch
启动前先给esuser用户权限,然后把用户切换到esuser用户
- sudo chgrp -R lighthouse ./es
- sudo chown -R lighthouse ./es
- sudo chmod 777 es
- su esuser
启动ElasticSearch
./bin/elasticsearch
然后参考资料修改了bin/elasticsearch-env文件,让es使用es目录里的jdk,
重新启动,报错如下:
- ERROR: [1] bootstrap checks failed
- [1]: the default discovery settings are unsuitable for production use; at least one of [discovery.seed_hosts, discovery.seed_providers, cluster.initial_master_nodes] must be configured
- ERROR: Elasticsearch did not exit normally - check the logs at /home/lighthouse/es/logs/my-application.log
把该释放的内存(可以使用free -h查看)都释放出来后,重新启动,成功了。
可以看到绑定了两个端口:
9300:集群节点间通讯接口
9200:客户端访问接口
访问http://43.138.0.199:9200/在客户端可以看到以下信息:
2、学习es,索引的维护
2.1创建索引
http://43.138.0.199:9200/student
PUT
2.2、获得索引信息
http://43.138.0.199:9200/student
GET
2.3删除索引
DELETE
3、为索引添加数据
RESTful接口URL的格式:
http://localhost:9200/<index>/<type>/[<id>]
3.1、学生索引中添加小学学生类型的数据
http://43.138.0.199:9200/student/xiaoxue/1
Post方式
Body如下:
{
"name":"张三",
"age":7
}
3.2、查看单个学生数据
http://43.138.0.199:9200/student/xiaoxue/1
GET
3.3、修改学生信息
http://43.138.0.199:9200/student/xiaoxue/1
put
{
"name": "张三",
"age": 9
}
再次查看该学生信息,截图如下:
3.4查询所有学生列表
再添加一个学生,可以验证列表中的多个结果。
然后,调用查询接口:
get接口
http://43.138.0.199:9200/student/_search
继续验证分页查询
GET方式,from表示从哪个数据开始读取(第一个数据就是0,以此类推),size表示读取多少个数据。
http://43.138.0.199:9200/student/_search?from=0&size=2
然后查询第2页的数据,from要改成2,如下所示:
GET
http://43.138.0.199:9200/student/_search?from=2&size=2
继续验证查询条件:
GET
http://43.138.0.199:9200/student/_search?from=0&size=2
body如下:
{
"query": {
"match": {
"name": "张三"
}
}
}
结果如下:
有关查询条件的说明如下:
有关查询结果的说明如下:
4、在ES中执行SQL查询ES数据
POST
http://43.138.0.199:9200/_sql?format=txt
Body如下:
{
"query": "SELECT name,age FROM student order by name desc limit 6"
}
执行结果如下:
参数format的取值说明如下:
format | Axxept HTTP Header | 说明 |
csv | text/csv | 逗号分隔 |
json | application/json | JSON格式 |
tsv | text/tab-separated-values | tab分隔 |
txt | text/pain | 文本格式 |
yaml | application/yaml | yaml格式 |
vbor | application/vbor | 简洁的二进制 |
smile | application/smile | 类似cbor的二进制 |
返回json格式的数据,验证如下:
返回数据如下:
- {
- "columns": [
- {
- "name": "name",
- "type": "text"
- },
- {
- "name": "age",
- "type": "long"
- }
- ],
- "rows": [
- [
- "李四",
- 8
- ],
- [
- "张三",
- 9
- ],
- [
- "66",
- 7
- ],
- [
- "44",
- 7
- ],
- [
- "44",
- 7
- ],
- [
- "33",
- 7
- ]
- ]
- }

5、根据SQL生成DSL语句
POST
http://43.138.0.199:9200/_sql/translate
Body如下:
{
"query": "SELECT name,age FROM student order by name desc limit 6"
}
执行结果如下:
- {
- "size": 6,
- "_source": {
- "includes": [
- "name",
- "age"
- ],
- "excludes": []
- },
- "sort": [
- {
- "name.keyword": {
- "order": "desc",
- "missing": "_first",
- "unmapped_type": "keyword"
- }
- }
- ]
- }

拿来查询数据
可见,可以拿来查询数据。
6、安装分词插件以及使用
在查看安装了的插件列表时,突然报需要java11,然后我安装了java11,并配置了环境变量。
Elasticsearch提供插件机制对系统进行扩展
以安装analysis-icu这个分词插件为例
在线安装:
- #查看已安装插件
- bin/elasticsearch-plugin list
- #安装插件
- bin/elasticsearch-plugin install analysis-icu
- #删除插件
- bin/elasticsearch-plugin remove analysis-icu
注意:安装和删除完插件后,需要重启ES服务才能生效。
测试分词效果
- POST _analyze
- {
- "analyzer":"icu_analyzer",
- "text":"中华人民共和国"
- }
执行结果要贴下:
http://43.138.0.199:9200/_analyze
Post
body如下:
{
"analyzer":"icu_analyzer",
"text":"中华人民共和国"
}
结果如下:
- {
- "tokens": [
- {
- "token": "中华",
- "start_offset": 0,
- "end_offset": 2,
- "type": "<IDEOGRAPHIC>",
- "position": 0
- },
- {
- "token": "人民",
- "start_offset": 2,
- "end_offset": 4,
- "type": "<IDEOGRAPHIC>",
- "position": 1
- },
- {
- "token": "共和国",
- "start_offset": 4,
- "end_offset": 7,
- "type": "<IDEOGRAPHIC>",
- "position": 2
- }
- ]
- }

测试分词效果
- #ES的默认分词设置是standard,会单字拆分
- POST _analyze
- {
- "analyzer":"standard",
- "text":"中华人民共和国"
- }
-
- #ik_smart:会做最粗粒度的拆
- POST _analyze
- {
- "analyzer": "ik_smart",
- "text": "中华人民共和国"
- }
-
- #ik_max_word:会将文本做最细粒度的拆分
- POST _analyze
- {
- "analyzer":"ik_max_word",
- "text":"中华人民共和国"
- }
-

执行结果要贴下:
创建索引时可以指定IK分词器作为默认分词器
- PUT /es_db
- {
- "settings" : {
- "index" : {
- "analysis.analyzer.default.type": "ik_max_word"
- }
- }
- }
执行结果要贴下:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。