1、es
不能使用root
用户启动,因此需要创建一个用户。
sudo adduser es 创建账号es
sudo passwd es 创建密码 密码是 huanmin123@qq.com
2、本地的多个es节点之间不能使用相同的data
和log
目录。
3、集群之间的脑裂问题,集群自己维护。
注意: 集群最少有2节点
暂时关闭防火墙
systemctl stop firewalld
永久关闭防火墙
systemctl disable firewalld
用户切换
su es
config/elasticsearch.yml 文件
cluster.name: search-7.3.2 # 集群名称 (多个es之间这个名称必须一致,才能实现集群)
path.data: /home/es/es/data/node-1 # 单机集群数据存储位置多节点不能一样
path.logs: /home/es/es/log/node-1 # 单机集群日志存储位置多节点不能一样
node.name: node-1 # 节点名称 ->集群需要不同
node.master: true # true:表示可以被选举成为master节点.(不用修改)
node.data: true # true: 表示可以存储数据。 (不用修改)
node.ingest: false # 文档存入索引之前对文档进行预处理 (不用修改)
network.host: 0.0.0.0 # 监听地址,可以写本地ip,通过此地址可以访问到es (不用修改)
http.port: 9200 # 监听端口 单机集群需要不同
transport.port: 9300 # 集群监听端口 单机集群需要不同
discovery.seed_hosts: ["127.0.0.1:9300","127.0.0.1:9301","127.0.0.1:9302"] # 有资格成为主节点的地址列表
cluster.initial_master_nodes: ["node-1","node-2","node-3"] # 初始的候选master节点列表。必须和node.name的值一致。
http.cors.enabled: true # true: 表示允许跨域。 (不用修改)
http.cors.allow-origin: "*" #表示支持所有域名 (不用修改)
config/jvm.options JVM的配置
默认是1G
-Xms300m
-Xmx300m
官方建议不要超过物理内存的百分之50 最大不要超过30g
进入到es目录里然后执行下面命令
前台启动
./bin/elasticsearch
后台启动
./bin/elasticsearch -d -p pid
关闭后台启动的es
pkill -F pid
curl -X GET "localhost:9200/?pretty" #查看单节点状态
curl -X GET "http://127.0.0.1:9200/_cat/nodes" # 查看集群状态
max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
解决办法
vi /etc/sysctl.conf
然后在文件最后添加
vm.max_map_count=655360
然后执行 sysctl -p
max file descriptors [4096] for elasticsearch process is too low, increase to at least [65536]
解决办法
vi /etc/security/limits.conf
然后在文件最后添加
* soft nofile 300000
* hard nofile 300000
* soft nproc 102400
* soft memlock unlimited
* hard memlock unlimited
master_not_discovered_exception/#
主节点指定的名字要保证存在,别指定了不存在的节点名。
最近在看es
相关的知识,此处简单记录一下es集群的搭建步骤。因为本地机器有限,此处模拟一下在同一台机器上搭建三个节点的集群
不用你去网上下载了,也不用你去配置了我直接给你配置好了,拿去就能用
7.3.0单机版ES集群
链接:https://pan.baidu.com/s/10KI3BuqedbhlPRicaQOGCg
提取码:1234
上传到linux 上然后
yum -y install unzip
unzip 7.3.0单机版ES集群.zip
使用root用户进入7.3.0单机版ES集群目录里 ,给这些目录加上权限
chown -R es elasticsearch-7.3.0-1
chown -R es elasticsearch-7.3.0-2
chown -R es elasticsearch-7.3.0-3
然后切换到 es 用户,启动这三个节点
注意: 我给ES的JVM默认配置的是300M 需要你自己根据业务调整
如果你觉得3个节点不够那么你可以把node-1节点复制一份改一改就行
比单机集群更简单,就是把节点名称改改就行了,其他的配置所有节点保持一致
不用你去网上下载了,也不用你去配置了我直接给你配置好了,拿去就能用
7.3.0多机版ES集群
链接:https://pan.baidu.com/s/1yaFADoEQnrQKZ95xjvkYrg
提取码:1234
上传到linux 上然后
yum -y install unzip
unzip 7.3.0多机版ES集群.zip
使用root用户进入7.3.0单机版ES集群目录里 ,给这些目录加上权限
chown -R es elasticsearch-7.3.0-1
chown -R es elasticsearch-7.3.0-2
chown -R es elasticsearch-7.3.0-3
然后切换到 es 用户,启动这三个节点
注意: 我给ES的JVM默认配置的是300M 需要你自己根据业务调整
如果你觉得3个节点不够那么你可以把node-1节点复制一份改一改就行
elasticsearch-head
yum -y install git
git clone git://github.com/mobz/elasticsearch-head.git //git下载相关资源
cd elasticsearch-head //进入相关的目录
npm install
npm run start
然后耐心等待,就可以了。
http://192.168.81.141:9100
kibana (版本必须和ES版本保持一致) (推荐)
官方地址:https://www.elastic.co/cn/products/kibana
cd /usr/src
wget https://artifacts.elastic.co/downloads/kibana/kibana-7.3.0-linux-x86_64.tar.gz
tar zxvf kibana-7.3.0-linux-x86_64.tar.gz
cd kibana-7.3.0-linux-x86_64
cd kibana-7.3.0-linux-x86_64/config
修改kibana.yml配置文件
server.port: 5601 # 开启默认端口号
server.host: "192.168.81.142" #写当前kibana的ip 不然打不开kbana
i18n.locale: "zh-CN" #使用kibana中文
./bin/kibana --allow-root # 使用root用户启动
http://192.168.81.143:5601
为什么要在elasticsearch中要使用ik这样的中文分词呢,那是因为es提供的分词是英文分词,对于中文的分词就做的非常不好了,因此我们需要一个中文分词器来用于搜索和使用。
支持中文分词的分词器有很多,word分词器、庖丁解牛、盘古
分词、Ansj分词等,但我们常用的还是下面要介绍的IK分词器。
IKAnalyzer是一个开源的,基于java语言开发的轻量级的中文分词工具包。从2006年12月推出1.0版开始,
IKAnalyzer已经推出 了3个大版本。最初,它是以开源项目Lucene为应用主体的,结合词典分词和文法分析算法的
中文分词组件。新版本的IKAnalyzer3.0则发展为 面向Java的公用分词组件,独立于Lucene项目,同时提供了对
Lucene的默认优化实现。
IK分词器特性如下:
1)采用了特有的“正向迭代最细粒度切分算法“,具有60万字/秒的高速处理能力。
2)采用了多子处理器分析模 式,支持:英文字母(IP地址、Email、URL)、数字(日期,常用中文数量词,罗马数字,科学计数法),中文 词汇(姓名、地名处理)等分词处理。
3)对中英联合支持不是很好,在这方面的处理比较麻烦.需再做一次查询,同时是支持个人词条的优化的词典存储,更小的内存占用。 4)支持用户词典扩展定义。 5)针对Lucene全文检索优 化的查询分析器IKQueryParser;采用歧义分析算法优化查询关键字的搜索排列组合,能极大的提高Lucene检索的 命中率。
倒排表以字或词为关键字进行索引,表中关键字所对应的记录表项记录了出现这个字或词的所有文档,一个表项就是一个字表段,它记录该文档的ID和字符在该文档中出现的位置情况。
由于每个字或词对应的文档数量在动态变化,所以倒排表的建立和维护都较为复杂,但是在查询的时候由于可以一次得到查询关键字所对应的所有文档,所以效率高于正排表。在全文检索中,检索的快速响应是一个最为关键的性能,而索引建立由于在后台进行,尽管效率相对低一些,但不会影响整个搜索引擎的效率。
cd /usr/src/elasticsearch-7.3.0-1/plugins
mkdir analysis-ik
cd analysis-ik
wget https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.3.0/elasticsearch-analysis-ik-7.3.0.zip
yum -y install unzip
unzip -o elasticsearch-analysis-ik-7.3.0.zip
然后重启 elasticsearch-7.3.0 即可自动加载IK分词器
[2021-08-03T18:54:42,354][INFO ][o.e.p.PluginsService ] [node-2] loaded plugin [analysis-ik]
当我们看到有这些的信息 那么 就表示 成功了
IK提供了两个分词算法ik_smart 和 ik_max_word
其中 ik_smart 为最少切分,ik_max_word为最细粒度划分
我们分别来试一下 :
先创建一个索引
PUT http://192.168.81.140:9200/test/
然后测试索引
POST http://192.168.81.140:9200/test/_analyze
最少切分
{
"analyzer": "ik_smart",
"text": "我是中国人"
}
结果:
{
"tokens": [
{
"token": "我",
"start_offset": 0,
"end_offset": 1,
"type": "CN_CHAR",
"position": 0
},
{
"token": "是",
"start_offset": 1,
"end_offset": 2,
"type": "CN_CHAR",
"position": 1
},
{
"token": "中国人",
"start_offset": 2,
"end_offset": 5,
"type": "CN_WORD",
"position": 2
}
]
}
POST http://192.168.81.140:9200/test/_analyze
最细粒度划分
{
"analyzer": "ik_max_word",
"text": "我是中国人"
}
结果
{
"tokens": [
{
"token": "我",
"start_offset": 0,
"end_offset": 1,
"type": "CN_CHAR",
"position": 0
},
{
"token": "是",
"start_offset": 1,
"end_offset": 2,
"type": "CN_CHAR",
"position": 1
},
{
"token": "中国人",
"start_offset": 2,
"end_offset": 5,
"type": "CN_WORD",
"position": 2
},
{
"token": "中国",
"start_offset": 2,
"end_offset": 4,
"type": "CN_WORD",
"position": 3
},
{
"token": "国人",
"start_offset": 3,
"end_offset": 5,
"type": "CN_WORD",
"position": 4
}
]
}
从上面我们就可以看出来 区别了吧 如果内容较为庞大的情况下不建议使用最细切分那样会导致速度非常慢
既然了解了 IK 那么我们就将IK 映射到Mapping中吧
修改索引映射mapping
重建索引
删除原有blog2索引
使用DELETE请求 http://localhost:9200/blog2
创建blog2索引,此时分词器使用ik_max_word
使用PUT请求 http://localhost:9200/blog2
Body
{
"mappings":{
"article":{
"properties":{
"id":{
"type":"long",
"store":true,
"index":false
},
"title":{
"type":"text",
"store":true,
"index":true,
"analyzer":"ik_max_word"
},
"content":{
"type":"text",
"store":true,
"index":true,
"analyzer":"ik_max_word"
}
}
}
}
}
创建索引blog2 和表article 以及表结构
elasticsearch-head里 查看索引信息
使用POST请求 http://localhost:9200/blog2/article/1
向blog2索引内article表中添加 文档id为1 的 一行数据
Body
{
"id":1,
"title":"ElasticSearch是一个基于Lucene的搜索服务器",
"content":"它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。Elasticsearch是用Java 开发的,并作为Apache许可条款下的开放源码发布,是当前流行的企业级搜索引擎。设计用于云计算中,能够达到实时 搜索,稳定,可靠,快速,安装使用方便。"
}
我们使用 最细切分 来看看 切分后的结果 然后在进行 query_string查询 和 term查询
http://127.0.0.1:9200/_analyze?analyzer=ik_max_word&pretty=true&text=ElasticSearch是一个基于Lucene的搜索服务器
token "elasticsearch"
token "是"
token "一个"
token "一"
token "个"
token "基于"
token "lucene"
token "的"
token "搜索"
token "服务器"
token "服务"
token "器"
上面就是ik 分词集
我们使用query_String查询 看看有什么变化
发送POST请求 http://localhost:9200/blog2/article/_search
Body
{
"query":{
"query_string":{
"default_field":"title",
"query":"搜索服务器"
}
}
}
结果 是能查询到的 默认采用的是 or 匹配 在ik分词集里 是能匹配到的
然后我们在试试 将请求体搜索服务器
字符串修改为 钢索
,再次查询 发现并没有查询到
因为 在ik分词集里没有 钢 或者 索 的词
我们使用 term 查询 看看有什么变化
发送POST请求 http://localhost:9200/blog2/article/_search
Body
{
"query":{
"term":{
"title":"搜索"
}
}
}
结果发现 是能查询到的 因为在ik分词集里是能找到搜索
这个词
版权说明 : 本文为转载文章, 版权归原作者所有 版权申明
原文链接 : https://blog.csdn.net/weixin_45203607/article/details/120247990
内容来源于网络,如有侵权,请联系作者删除!