1.1、Elasticsearch相关介绍
1.1.1 ES能做什么?
全文检索(全部字段)、模糊查询(搜索)、数据分析(提供分析语法,例如聚合)
1.1.2 ElasticSearch5和ElasticSearch6区别
ElasticSearch6(和ElasticSearch5的区别在于,root用户权限,一个库能否建立多张表)
1.1.3elasticSearch(搜索引擎)B+tree算法
倒排索引(内容上建立索引,用内容匹配索引)

1.2、Elasticsearch安装
1.2.1安装环境:centos7+jdk8
1.2.2配置文件/config elasticsearch.yml(集群文件)与jvm.options(Jvm配置文件)

1.2.3上传解并解压到centos /opt/es目录下
4. 在opt下新建目录:mkdir -p /opt/es
5. 上传并解压 tar -zxvf elasticsearch-6.3.1.tar.gz、elasticsearch-analysis-ik6.rar、kibana-6.3.1-linux-x86_64.tar.gz
6. chmod 777 -R(循环授权所有目录) elasticsearch-6.3.1

1.2.4配置
Es使用最大线程数、最大内存数、访问的最大文件数
-
启动脚本elasticsearch

-
创建用户并切换
- 创建用户:adduser es
- 切换用户:su es
-
执行脚本./elasticsearch
-
忽略日志启动脚本:nohup ./elasticsearch &
-
出现问题
- Es使用Jvm内存大小不够用

- Es使用Jvm内存大小不够用
-
修改配置文件
- vim elasticsearch-6.3.1/config/jvm.options 配置jvm的内存大小

- vim elasticsearch-6.3.1/config/jvm.options 配置jvm的内存大小
-
在elasticSearch.yml中配置host地址(本机地址),外网允许访问

-
启动问题:Es使用最大线程数、最大内存数、访问的最大文件数

-
需要修改两处配置文件
- 修改Linux的limits文件,设置内存线程和文件

- 修改Linux的sysctl文件,配置系统使用内存

- 修改Linux的limits文件,设置内存线程和文件
-
Es权限问题
- 首先root用户解压: tar -zxvf elasticsearch-6.3.1.tar.gz
- chmod 777 -R(循环授权所有目录) elasticsearch-6.3.1
es文件四处需要修改

1.3、Elasticsearch的基本概念
1.通过(9200端口)http协议进行交互
http://47.101.36.177:9200/_cat/indices?v

2.基本概念
-
| 关键字 | 含义 |
|---|---|
| cluster | 整个elasticsearch 默认就是集群状态,整个集群是一份完整,互备的数 据。 |
| node | 集群中的一个节点,一般只一个进程就是一个node |
| shard | 分片,即使是一个节点中的数据也会通过hash算法,分成多个片存放,默认是5片。 |
| index | 相当于rdbms的database, 对于用户来说是一个逻辑数据库,虽然物理上会被分多个shard存放,也可能存放在多个node中。 |
| type | 类似于rdbms的table,但是与其说像table,其实更像面向对象中的class , 同一Json的格式的数据集合。 |
| document | 类似于rdbms的 row、面向对象里的object |
| field | 相当于字段、属性 |
3.开发工具kibana
- 解压kibana:tar -zxvf kibana-6.3.1-linux-x86_64.tar.gz

- 配置kibana的es信息:vim kibanna.yml

- 启动kibana:nohup ./kibana &

- 查看kibana的进程id

3.elasticSearch简单版增删改查
- 插入数据put
PUT /movie_index/movie/1
{ "id":1,
"name":"operation red sea",
"doubanScore":8.5,
"actorList":[
{"id":1,"name":"zhang yi"},
{"id":2,"name":"hai qing"},
{"id":3,"name":"zhang han yu"}
]
}
- 查询数据get

查询带"红"的所有内容
GET movie_index/movie/_search
{
"query": {
"match": {
"name": "red"
}
}
}
4.elasticSearc对中文的理解
- 中文拆词
GET _analyze
{
"text": "湄公河行动"
}
- 中文拆词结果
{
"tokens": [
{
"token": "湄",
"start_offset": 0,
"end_offset": 1,
"type": "<IDEOGRAPHIC>",
"position": 0
},
{
"token": "公",
"start_offset": 1,
"end_offset": 2,
"type": "<IDEOGRAPHIC>",
"position": 1
},
{
"token": "河",
"start_offset": 2,
"end_offset": 3,
"type": "<IDEOGRAPHIC>",
"position": 2
},
{
"token": "行",
"start_offset": 3,
"end_offset": 4,
"type": "<IDEOGRAPHIC>",
"position": 3
},
{
"token": "动",
"start_offset": 4,
"end_offset": 5,
"type": "<IDEOGRAPHIC>",
"position": 4
}
]
}
- 加入中文分词器
-
进入插件目录,解压analysis-ik分词器

-
IK(中英文分词器)有两个
- ik_smart(简易分词)
GET _analyze { "analyzer": "ik_smart" , "text": "如果缓存中没有再到MySQL" }分词结果
{ "tokens": [ { "token": "如果", #分词 "start_offset": 0, #开始偏移 "end_offset": 2, #结束偏移 "type": "CN_WORD", #单词类型 "position": 0 #位置 }, { "token": "缓存", "start_offset": 2, "end_offset": 4, "type": "CN_WORD", "position": 1 }, { "token": "中", "start_offset": 4, "end_offset": 5, "type": "CN_CHAR", "position": 2 }, { "token": "没有", "start_offset": 5, "end_offset": 7, "type": "CN_WORD", "position": 3 }, { "token": "再到", "start_offset": 7, "end_offset": 9, "type": "CN_WORD", "position": 4 }, { "token": "mysql", "start_offset": 9, "end_offset": 14, "type": "ENGLISH", "position": 5 } ] }- ik_max_work(尽最大可能分词)
-
- Kibana出现异常
log [11:49:18.892] [warning][admin][elasticsearch] No living connections
log [11:49:18.894] [warning][admin][elasticsearch] Unable to revive connection: http://node1:9200/
log [11:49:18.894] [warning][admin][elasticsearch] No living connections
error [11:49:18.896] [warning][stats-collection] Error: No Living connections
at sendReqWithConnection (/opt/kibana-6.5.1-linux-x86_64/node_modules/elasticsearch/src/lib/transport.js:226:15)
at next (/opt/kibana-6.5.1-linux-x86_64/node_modules/elasticsearch/src/lib/connection_pool.js:214:7)
at _combinedTickCallback (internal/process/next_tick.js:131:7)
at process._tickDomainCallback (internal/process/next_tick.js:218:9)
log [11:49:18.897] [warning][stats-collection] Unable to fetch data from kibana collector
error [11:49:18.897] [warning][stats-collection] Error: No Living connections
at sendReqWithConnection (/opt/kibana-6.5.1-linux-x86_64/node_modules/elasticsearch/src/lib/transport.js:226:15)
at next (/opt/kibana-6.5.1-linux-x86_64/node_modules/elasticsearch/src/lib/connection_pool.js:214:7)
at _combinedTickCallback (internal/process/next_tick.js:131:7)
at process._tickDomainCallback (internal/process/next_tick.js:218:9)
log [11:49:18.899] [warning][stats-collection] Unable to fetch data from canvas collector
error [11:49:18.900] [warning][stats-collection] Error: No Living connections
at sendReqWithConnection (/opt/kibana-6.5.1-linux-x86_64/node_modules/elasticsearch/src/lib/transport.js:226:15)
at next (/opt/kibana-6.5.1-linux-x86_64/node_modules/elasticsearch/src/lib/connection_pool.js:214:7)
at _combinedTickCallback (internal/process/next_tick.js:131:7)
at process._tickDomainCallback (internal/process/next_tick.js:218:9)
log [11:49:18.902] [warning][stats-collection] Unable to fetch data from kql collector
error [11:49:18.909] [warning][stats-collection] Error: No Living connections
at sendReqWithConnection (/opt/kibana-6.5.1-linux-x86_64/node_modules/elasticsearch/src/lib/transport.js:226:15)
at next (/opt/kibana-6.5.1-linux-x86_64/node_modules/elasticsearch/src/lib/connection_pool.js:214:7)
at _combinedTickCallback (internal/process/next_tick.js:131:7)
at process._tickDomainCallback (internal/process/next_tick.js:218:9)
log [11:49:18.927] [warning][stats-collection] Unable to fetch data from rollups collector
error [11:49:18.928] [warning][stats-collection] Error: No Living connections
at sendReqWithConnection (/opt/kibana-6.5.1-linux-x86_64/node_modules/elasticsearch/src/lib/transport.js:226:15)
at next (/opt/kibana-6.5.1-linux-x86_64/node_modules/elasticsearch/src/lib/connection_pool.js:214:7)
at _combinedTickCallback (internal/process/next_tick.js:131:7)
at process._tickDomainCallback (internal/process/next_tick.js:218:9)
log [11:49:18.929] [warning][stats-collection] Unable to fetch data from reporting collector
error [11:49:18.929] [warning][stats-collection] Error: No Living connections
at sendReqWithConnection (/opt/kibana-6.5.1-linux-x86_64/node_modules/elasticsearch/src/lib/transport.js:226:15)
at next (/opt/kibana-6.5.1-linux-x86_64/node_modules/elasticsearch/src/lib/connection_pool.js:214:7)
at _combinedTickCallback (internal/process/next_tick.js:131:7)
at process._tickDomainCallback (internal/process/next_tick.js:218:9
关闭kibbana
[root@izuf6cn5k7l8xuxojhszqbz es]# ps -ef | grep node
root 4676 4652 0 22:17 pts/1 00:00:00 grep --color=auto node
root 9689 1 0 Jan09 ? 00:03:47 ./../node/bin/node --no-warnings ./../src/cli
[root@izuf6cn5k7l8xuxojhszqbz es]# kill 9689
- 分词相关性算分

影响相关度算分的参数:
1、TF(Term Frequency):词频,即单词在文档中出现的次数,词频越高,相关度越高
2、Document Frequency(DF):文档词频,即单词出现的文档数
3、IDF(Inverse Document Frequency):逆向文档词频,与文档词频相反,即1/DF。即单词出现的文档数越少,相关度越高(如果一个单词在文档集出现越少,算为越重要单词)
4、Field-length Norm:文档越短,相关度越高
5.elasticSearch的集群
- 集群配置vim elasticSearch.yml
#集群的名称
cluster.name: steven-es
#节点名称,其余两个节点分别为node-2 和node-3
node.name: node-1
#指定该节点是否有资格被选举成为master节点,默认是true,es是默认集群中的第一台机器为master,如果这台机挂了就会重新选举master
node.master: true
#允许该节点存储数据(默认开启)
node.data: true
#索引数据的存储路径
path.data: /opt/es/elasticsearch/data/node1
#日志文件的存储路径
path.logs: /opt/es/elasticsearch/log/node1
#设置为true来锁住内存。因为内存交换到磁盘对服务器性能来说是致命的,当jvm开始swapping时es的效率会降低,所以要保证它不swap
bootstrap.memory_lock: true
#绑定的ip地址
network.host: 192.168.100.97
#设置对外服务的http端口,默认为9200
http.port: 9201
# 设置节点间交互的tcp端口,默认是9300
transport.tcp.port: 9301
#Elasticsearch将绑定到可用的环回地址,并将扫描端口9300到9305以尝试连接到运行在同一台服务器上的其他节点。
#这提供了自动集群体验,而无需进行任何配置。数组设置或逗号分隔的设置。每个值的形式应该是host:port或host
#(如果没有设置,port默认设置会transport.profiles.default.port 回落到transport.tcp.port)。
#请注意,IPv6主机必须放在括号内。默认为127.0.0.1, [::1]
#其他两个节点的端口号(不包含自己)
discovery.zen.ping.unicast.hosts: ["192.168.100.97:9302", "192.168.100.97:9303"]
#如果没有这种设置,遭受网络故障的集群就有可能将集群分成两个独立的集群 - 分裂的大脑 - 这将导致数据丢失
discovery.zen.minimum_master_nodes: 2
- 可能出现问题
jvm:内存太大

解决办法:在jvm.options 中调整JVM最大可用内存(Xmx)、初始化内存(Xms)

5.节点、分片、索引
- 节点
一个节点就是一个es的服务器,es集群中主节点主要负责集群的管理和任务的分发,一般文档的不负责增删改查 - 分片
分片是es的实际物理单元(一个lucene的实例) - 索引
索引是es的物理单元,一个索引建立在不同分片的机器上 - 复制片
每个机器的分片一般都会在其他机器上由2~3个复制片(提高数据的容错率) - 容错
一旦集群中的某些机器发生故障,会在其他机器的管理下重新分配资源 - 分片路由
- 写操作(新建、删除)只能在主分片上进行,然后将结果同步到复制分片
- Syn 主分片同步成功后,才返回给客户端
- Sync 主分片在操作成功后,再复制给同步分片的同时返回给客户端
- 查询操作可以在主分片或同步分片上都可以


本文详细介绍了Elasticsearch的功能,包括全文检索、模糊查询及数据分析,对比了Elasticsearch5与6的区别,讲解了B+tree算法和倒排索引原理。涵盖了在CentOS7环境下安装配置流程,探讨了集群配置、节点、分片、索引等核心概念,并解决了常见问题。
8010

被折叠的 条评论
为什么被折叠?



