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

用途:做搜索功能
使用案例: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/
安装成功浏览器显示

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
修改绑定的ip:
network.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

















暂无评论内容