Linux下搭建es流程

1.Elasticsearch介绍

Elasticsearch是一款基于Lucene的分布式全文检索服务器,让我们看一下百度文库给出的解释。

Linux下搭建es流程

用途:做搜索功能
使用案例:GitHub、维基百科、等等

Solr对比:
1.实时性ES高于Solr
2.Solr传统搜索性能高于ES

Elasticsearch是一款基于Lucene的分布式全文检索服务器,让我们看一下百度文库给出的解释。

用途:做搜索功能
使用案例:GitHub、维基百科、等等
Solr对比:

实时性ES高于Solr
Solr传统搜索性能高于ES
2.Elasticsearch安装
注意:安装必须在java1.8版本以上
Windows环境

去官网下载获得压缩包一个,版本6.2.4
解压缩进入目录找到bin文件夹
双击运行bin文件夹中elasticsearch.bat脚本
在浏览器输入http://localhost:9200/
安装成功浏览器显示

2.Elasticsearch安装

备注:Elasticsearch安装
注意:安装必须在java1.8版本以上
Windows环境

1.去官网下载获得压缩包一个,版本6.2.4
2.解压缩进入目录找到bin文件夹
3.双击运行bin文件夹中elasticsearch.bat脚本
4.在浏览器输入http://localhost:9200/

安装成功浏览器显示

Linux下搭建es流程

3.Linux环境

1.安装和配置

我们将在linux下安装Elasticsearch,使用版本6.2.4

2.新建一个用户

出于安全思考,elasticsearch默认不允许以root账号运行。

创建用户:

useradd 用户名
设置密码:
passwd 用户名
切换用户:
su 用户名
#添加组
groupadd es
#添加用户
useradd es -g es -p es
#修改es所属用户
chown -R es:es elasticsearch-6.2.4
su es

3.上传安装包,并解压

我们将安装包上传到:/home/用户名目录

解压缩:

tar -zxvf elasticsearch-6.2.4.tar.gz
我们把目录重命名:
mv elasticsearch-6.2.4/ elasticsearch
进入,查看目录结构:
ls -l /home/用户名/elasticsearch

4.修改配置

我们进入config目录:cd config

需要修改的配置文件有两个:

jvm.options

Elasticsearch基于Lucene的,而Lucene底层是java实现,因此我们需要配置jvm参数。

编辑jvm.options:

vi jvm.options

默认配置如下:

-Xms1g
-Xmx1g

内存占用太多了,我们调小一些:

-Xms512m
-Xmx512m

elasticsearch.yml

vi elasticsearch.yml

修改数据和日志目录:

path.data: /home/用户名/elasticsearch/data # 数据目录位置
path.logs: /home/用户名/elasticsearch/logs # 日志目录位置

我们把data和logs目录修改指向了elasticsearch的安装目录。但是这两个目录并不存在,因此我们需要创建出来。

进入elasticsearch的根目录,然后创建:

mkdir data
mkdir logs
修改绑定的ipnetwork.host: 0.0.0.0 # 绑定到0.0.0.0,允许任何ip来访问
#默认只允许本机访问,修改为0.0.0.0后则可以远程访问
#目前我们是做的单机安装,如果要做集群,只需要在这个配置文件中添加其它节点信息即可。

elasticsearch.yml的其它可配置信息:

属性名

说明

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

设置bindhost和publishhost,设置为0.0.0.0允许外网访问

http.port

设置对外服务的http端口,默认为9200。

transport.tcp.port

集群结点之间通信端口

discovery.zen.ping.timeout

设置ES自动发现节点连接超时的时间,默认为3秒,如果网络延迟高可设置大些

discovery.zen.minimummasternodes

主结点数量的最少值 ,此值的公式为:(mastereligiblenodes / 2) + 1 ,列如:有3个符合要求的主结点,那么这里要设置为2

5.运行

进入elasticsearch/bin目录,可以看到下面的执行文件:

然后输入命令:

./elasticsearch

发现报错了,启动失败:

错误1:内核过低
我们使用的是centos6,其linux内核版本为2.6。而Elasticsearch的插件要求至少3.5以上版本。不过没关系,我们禁用这个插件即可。

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

bootstrap.system_call_filter: false

然后重启

错误2:文件权限不足
再次启动,又出错了:

[1]: max file descriptors [4096] for elasticsearch process likely too low, increase to at least [65536]

我们用的是普通用户,而不是root,所以文件权限不足。

第一用root用户登录。

然后修改配置文件:

vi /etc/security/limits.conf

添加下面的内容:

* soft nofile 65536
* hard nofile 131072
* soft nproc 4096
* hard nproc 4096

错误3:线程数不够
刚才报错中,还有一行:

[1]: max number of threads [1024] for user [leyou] is too low, increase to at least [4096]

这是线程数不够。

继续修改配置:

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

修改下面的内容:

* soft nproc 1024

改为:

* soft nproc 4096

错误4:进程虚拟内存

[3]: max virtual memory areas vm.max_map_count [65530] likely too low, increase to at least [262144]

vm.maxmapcount:限制一个进程可以拥有的VMA(虚拟内存区域)的数量,继续修改配置文件, :

vi /etc/sysctl.conf

添加下面内容:

vm.max_map_count=655360

然后执行命令:

sysctl -p

重启终端窗口
所有错误修改完毕,必定要重启你的 Xshell终端,否则配置无效。

启动
进入elasticsearch/bin目录,然后输入命令:

./elasticsearch #前台运行
./elasticsearch -d #后台运行

可以看到绑定了两个端口:

9300:集群节点间通讯接口
9200:客户端访问接口
我们在浏览器中访问:http://127.0.0.1:9200

3.Elasticsearch理论知识
看过我上篇Lucene的文章,大家知道我把Lucene和传统数据库对比,实则他们许多一样之处,接下来我们拿Elasticsearch和Mysql进行比较。

Mysql -> database -> table -> rows -> columns
Elasticsearch -> index -> type -> documents -> fields

index(索引)
可以类似看成一个database,但区别于就是一个拥有几分类似特征的文档的集合,列如你可以有商品数据索引、或则客户数据索引。

type(类型)
可以类似看成一个table,就是给文档分分类用的,一般,会为具有一组共同字段的文档定义一个类型。

documents (文档)
可以类似看成一个table下一行数据, 一个文档是一个可被索引的基础信息单元。

fields(字段,在lucene中叫域)
可以类似看成一个table的字段,对文档数据根据不同属性进行的分类标识

mapping(映射)
可以类似看成字段的数据类型和约束,mapping是处理数据的方式和规则方面做一些限制,如某个字段的数据类型、默认值、分析器、是否被索引等等

shards&replicas(分片&备份)
ES是分布式大数据量全文检索服务器,把文档数据切成片段,多个片合在一起是一个完整的数据。在分布式环境中很有就能出现单点故障问题,这时候需要备份每个片段会被复制和转移同步。

4.RESTfull语法

我这里使用kibana,也可以使用其他工具实现

创建索引index和映射mapping

PUT /索引名
{
    "mappings": {
        "type名": {
            "properties": {
                "fields名": {
                 	"type": "类型",    
                    "store": 是否储存[true,false],
                    "index": 是否索引[true,false],
                    "analyzer":"分词器"
                },
                "fields名": {
                 	"type": "text",    
                    "store": true,
                    "index": true,
                    "analyzer":"standard"
                }
            }
        }
    }
}
}
}

创建索引index后添加映射mapping


POST /索引名/type名/_mapping
{
    "type名": {
        "properties": {
            "fields名": {
                "type": "text",
                "store": true,
                "index": true,
                "analyzer": "standard"
            }
        }
    }
}

删除索引index

DELETE /索引名

添加文档document

POST /索引名/type名/[_id]
{
"FIELD": "VALUE",
"FIELD": "VALUE",
"FIELD": "VALUE"
}

修改文档document

和添加一样,并且_id存在

删除文档document

DELETE /索引名/type名/id

根据_id查询

GET /索引名/type名/id

根据term查询

POST /索引名/type名/search
{
    "query": {
        "term": {
            "FIELD": "VALUE"
        }
    }
}

根据query_string查询

POST /索引名/type名/_search
{
    "query": {
        "query_string": {
            "default_field": "FIELD",
            "query": "this AND that OR thus"
        }
    }
}

5.IK分词器

查看分词效果

GET /_analyze
{
"analyzer": "standard",
"text":"VALUE"
}

集成IK分词器

下载IK分词器压缩包并解压缩
把其中elasticsearch文件夹改名ik-analyzer
把ik-analyzer文件夹放置在elasticsearch目录的plugins文件夹
重启elasticsearch服务器
测试分词器效果,把analyzer的值改成iksmart 或 ikmax_word

© 版权声明
THE END
如果内容对您有所帮助,就支持一下吧!
点赞0 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容