一、es介绍

1、什么是es?

Elaticsearch,简称为 ES, ES 是一个开源的高扩展的分布式全文搜索引擎, 是整个 ElasticStack 技术栈的核心。

1、elasticsearch是一个基于Lucene的分布式全文检索服务器。 2、elasticsearch隐藏了Lucene的复杂性,对外提供Restful 接口来操作索引、搜索。

2、es原理
索引结构

下图是ElasticSearch的索引结构,右边黑蓝色色部分是原始文档,左边黄色部分是逻辑结构,逻辑结构也是为了更好的去描述ElasticSearch的工作原理及去使用物理结构中的索引文件。

es文件浏览器按时间排序 es文件浏览器排序方式_elasticsearch

倒排索引

倒排索引(Inverted index):也常被称为反向索引,倒排索引是从关键字到文档的映射(已知关键字求文档)。

逻辑结构部分是一个倒排索引表,由三部分组成: 1、将搜索的文档最终以Document方式存储起来。 2、将要搜索的文档内容分词,所有不重复的词组成分词列表。 3、每个分词和docment都有关联。 如下

es文件浏览器按时间排序 es文件浏览器排序方式_搜索引擎_02

现在,如果我们想搜索 包含quick brown词条的文档:

es文件浏览器按时间排序 es文件浏览器排序方式_es文件浏览器按时间排序_03

两个文档都匹配,但是第一个文档比第二个匹配度更高。如果我们使用仅计算匹配词条数量的简单 相似性算法 ,那么,我们可以说,对于我们查询的相关性来讲,第一个文档比第二个文档更佳。

正排索引:就比如查字典,要从第一页开始找,直到找到位置(文档----->关键字) 倒排索引:查字典时通过目录查询(关键字---->文档) 倒排索引组成: term[分词] term----------------->document[链接] document[文档] 分词列表的特点: 1、不重复 2、“的 得 地”语气词不参加分词 3、不搜索的field不参加分词

3、es客户端

TransportClient:官方计划8.0版本删除 RestHignLevelClient:官方推荐

4、es的启动器

elasticsearch-rest-high-level-client

二、es安装和启动

环境需求

1、jdk必须是jdk1.8.0_131以上版本。 2、ElasticSearch 需要至少4096 的线程池和 262144字节以上空间的虚拟内存才能正常启动,所以需要为虚拟机分配至少1.5G以上的内存 3、从5.0开始,ElasticSearch 安全级别提高了,不允许采用root帐号启动 4、Elasticsearch的插件要求至少centos的内核要3.5以上版本

下载

ElasticSearch官网:https://www.elastic.co/cn/

创建用户

从5.0开始,ElasticSearch 安全级别提高了,不允许采用root帐号启动,所以要添加一个用户。

1.创建elk 用户组bash groupadd elk 2.创建用户adminuseradd adminpasswd admin 3.将admin用户添加到elk组usermod -G elk admin 为用户分配权限

#chown将指定文件的拥有者改为指定的用户或组 -R处理指定目录以及其子目录下的所有文件chown -R admin:elk /usr/upload
chown -R admin:elk /usr/local
此时admin用户就有权限了

es文件浏览器按时间排序 es文件浏览器排序方式_搜索引擎_04

切换用户su admin

安装

先上传安装包到 /usr/upload 解压到 /usr/localtar -zxvf elasticsearch-6.2.3.tar.gz -C /usr/local

ES目录结构

bin 目录:可执行文件包 config 目录:配置相关目录 lib 目录:ES 需要依赖的 jar 包,ES 自开发的 jar 包 logs 目录:日志文件相关目录 modules 目录:功能模块的存放目录,如aggs、reindex、geoip、xpack、eval plugins 目录:插件目录包,三方插件或自主开发插件 data 目录:在 ES 启动后,会自动创建的目录,内部保存 ES 运行过程中需要保存的数据。

配置文件

ES安装目录config中配置文件:

elasticsearch.yml:用于配置Elasticsearch运行参数

jvm.options:用于配置Elasticsearch JVM设置

log4j2.properties:用于配置Elasticsearch日志

修改 elasticsearch.ymlvim elasticsearch.yml 内容都是被注掉的,可以删除 也能直接插入,文件插入内容

cluster.name: power_shop node.name: power_shop_node_1 network.host: 0.0.0.0 http.port: 9200 transport.tcp.port: 9300 discovery.zen.ping.unicast.hosts: [“0.0.0.0:9300”, “0.0.0.0:9301”] path.data: /usr/local/elasticsearch-6.2.3/data path.logs: /usr/local/elasticsearch-6.2.3/logs http.cors.enabled: true http.cors.allow-origin: /.*/

注意path.data和path.logs路径配置正确。 常用的配置项 cluster.name: 配置elasticsearch的集群名称,默认是elasticsearch。建议修改成一个有意义的名称。 node.name: 节点名,通常一台物理服务器就是一个节点,es会默认随机指定一个名字,建议指定一个有意义的名称,方便管理一个或多个节点组成一个cluster集群,集群是一个逻辑的概念,节点是物理概念,后边章节会详细介绍。 path.data: 设置索引数据的存储路径,默认是es_home下的data文件夹,可以设置多个存储路径,用逗号隔开。 path.logs: 设置日志文件的存储路径,默认是es_home下的logs文件夹 network.host: 设置绑定主机的ip地址,设置为0.0.0.0表示绑定任何ip,允许外网访问,生产环境建议设置为具体的ip。 http.port: 9200 设置对外服务的http端口,默认为9200。 transport.tcp.port: 9300 集群结点之间通信端口 discovery.zen.ping.unicast.hosts:[“host1:port”, “host2:port”, “…”] 设置集群中master节点的初始列表。 discovery.zen.ping.timeout: 3s 设置ES自动发现节点连接超时的时间,默认为3秒,如果网络延迟高可设置大些。 http.cors.enabled: 是否支持跨域,默认为false http.cors.allow-origin: 当设置允许跨域,默认为*,表示支持所有域名

修改jvm.options 设置最小及最大的JVM堆内存大小: 在jvm.options中设置 -Xms和-Xmx: 两个值设置为相等, 将Xmx 设置为不超过物理内存的一半。 默认内存占用太多了,我们调小一些vim jvm.options

es文件浏览器按时间排序 es文件浏览器排序方式_es文件浏览器按时间排序_05

启动和关闭

启动

./elasticsearch #或./elasticsearch -d

关闭

ps-ef|grep elasticsearchkill -9 pid

启动会出现问题

es文件浏览器按时间排序 es文件浏览器排序方式_大数据_06

解决文件创建权限问题

Linux 默认来说,一般限制应用最多创建的文件是 4096个。但是 ES 至少需要 65536 的文件创建权限。这里用的是admin用户,而不是root,所以文件权限不足。

使用root用户修改配置文件:

vim /etc/security/limits.conf

文件中追加内容

* soft nofile 65536
* hard nofile 65536

再次启动

如果还是这个错需要重启或重读配置文件

es文件浏览器按时间排序 es文件浏览器排序方式_Elastic_07

还有错误

解决虚拟内存问题

ES 需要开辟一个 262144字节以上空间的虚拟内存。Linux 默认不允许任何用户和应用直接开辟虚拟内存。 修改配置文件

vim /etc/sysctl.conf

追加内容

#限制一个进程可以拥有的VMA(虚拟内存区域)的数量
vm.max_map_count=655360

然后执行命令,让sysctl.conf配置生效

sysctl -p

再次运行

es文件浏览器按时间排序 es文件浏览器排序方式_搜索引擎_08

这次没有报错,结果为started,启动成功

启动还可能遇上两个问题

内核问题

es文件浏览器按时间排序 es文件浏览器排序方式_elasticsearch_09

这个禁用插件即可

修改elasticsearch.yml文件,在最下面添加配置

bootstrap.system_call_filter: false

还有个是线程开启限制问题 报错结果

[1]: max number of threads [1024] for user [admin] is too low, increase to at least [4096] 默认的 Linux 限制 root 用户开启的进程可以开启任意数量的线程,其他用户开启的进程可以开启1024 个线程。必须修改限制数为4096+。因为 ES 至少需要 4096 的线程池预备。

如果虚拟机的内存是 1G,最多只能开启 3000+个线程数。至少为虚拟机分配 1.5G 以上的内存。

使用root用户修改配置:

vim /etc/security/limits.d/90-nproc.conf

把原有内容修改修改

* soft nproc 1024 #原有内容

改为

* soft nproc 4096

测试

ES 中只要启动了任意一个 ES 应用就是启动了一个 ES的 cluster 集群。默认的 ES集群命名为 elasticsearch。如果启动了多个应用(可以在多个节点或单一节点上启动多个应用),默认的ES 会自动找集群做加入集群的过程。 浏览器访问:http://192.168.226.206:9200

返回结果

es文件浏览器按时间排序 es文件浏览器排序方式_es文件浏览器按时间排序_10

安装Kibana

什么是Kibana

Kibana是ES提供的一个基于Node.js的管理控制台, 可以很容易实现高级的数据分析和可视化,以图标的形式展现出来。

kibana可以用来编辑请求语句的,方便学习操作es的语法。有时在进行编写程序,写到查询语句时,往往我会使用kibana进行书写,然后再粘贴到程序中。(不容易出错)

下载

ElasticSearch官网:https://www.elastic.co/cn/

安装

在window中安装Kibana很方便,解压即安装

修改配置

修改config/kibana.yml配置 取消注释并修改

server.port: 5601 server.host: “0.0.0.0” #允许来自远程用户的连接 elasticsearch.url: http://192.168.226.206:9200 #Elasticsearch实例的URL

启动

…/bin/kibana

启动成功

es文件浏览器按时间排序 es文件浏览器排序方式_大数据_11

浏览器访问:http://127.0.0.1:5601

es文件浏览器按时间排序 es文件浏览器排序方式_es文件浏览器按时间排序_12

安装head

什么是head

head插件是ES的一个可视化管理插件,用来监视ES的状态,并通过head客户端和ES服务进行交互,比如创建映射、创建索引等。从ES6.0开始,head插件支持使得node.js运行。

安装

1、下载head 下载地址 https://github.com/mobz/elasticsearch-head 解压完成后进入目录,打开cmd窗口输入npm run start 结果

es文件浏览器按时间排序 es文件浏览器排序方式_搜索引擎_13

浏览器访问:http://127.0.0.1:9100/

修改地址为 Elasticsearch虚拟机地址,点击连接

es文件浏览器按时间排序 es文件浏览器排序方式_Elastic_14