Lucene的内建不支持分布式
Lucene是作为嵌入的类库形式利用的,本身是没有对分布式支持。
区间范围搜索速率非常缓慢

Lucene的区间范围搜索API是扩展补充的,对付在单个文档中term涌现比较多的情形,搜索速率会变得很慢
Lucene只有在数据天生索引文件之后(Segment),才能被查询到,做不到实时
可靠性无法保障
无法保障Segment索引段的可靠性
2、Elasticsearch先容Elasticsearch是一个基于Lucene的搜索做事器、供应了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口
Elasticsearch是用Java措辞开拓的,并作为Apache容许条款下的开放源码发布,是一种盛行的企业级搜索引擎
Elasticsearch用于云打算中,能够达到实时搜索,稳定,可靠,快速,安装利用方便。官方客户端在Java、.NET(C#)、PHP、Python、Apache Groovy、Ruby和许多其他措辞中都是可用的
根据DB-Engines的排名显示,Elasticsearch是最受欢迎的企业搜索引擎,其次是Apache Solr,也是基于Lucene。
3、Elasticsearch运用处景信息检索,一样平常用于网站的全文检索
企业内部系统搜索,关系型数据库利用like进行模糊检索,会导致索引失落效,效率低下,可以基于Elasticsearch来进行检索
数据剖析引擎,Elasticsearch 聚合可以对数十亿行日志数据进行聚合剖析,探索数据的趋势和规律
4、Elasticsearch特点1)、海量数据处理大型分布式集群(数百台规模做事器)
处理PB级数据
小公司也可以进行单机支配
2)、开箱即用大略易用,操作非常大略
快速支配生产环境
3)、作为传统数据库的补充传统关系型数据库不善于全文检索(MySQL自带的全文索引,与ES性能差距非常大)
传统关系型数据库无法支持搜索排名、海量数据存储、剖析等功能
Elasticsearch可以作为传统关系数据库的补充,供应RDBM无法供应的功能
5、ElasticSearch比拟SolrSolr 利用Zookeeper 进行分布式管理,而 Elasticsearch 自身带有分布式折衷管理功能
Solr 支持更多格式的数据,而 Elasticsearch 仅支持json文件格式
Solr 官方供应的功能更多,而 Elasticsearch 本身更看重于核心功能,高等功能多有第三方插件供应
Solr 在传统的搜索运用中表现好于 Elasticsearch,但在处理实时搜索运用时效率明显低于Elasticsearch
二、安装Elasticsearch此处支配三台es,做事器名称为server1、server2和server3。
1、创建普通用户ES不能利用root用户来启动,必须利用普通用户来安装启动。
创建一个普通用户以及定义一些常规目录用于存放我们的数据文件以及安装包等。
创建一个es专门的用户(必须)
# 利用root用户在三台机器实行以下命令
useradd alanchan
passwd rootroot
2、为普通用户alanchan添加sudo权限为了让普通用户有更大的操作权限,一样平常都会给普通用户设置sudo权限,方便普通用户的操作三台机器利用root用户实行visudo命令然后为es用户添加权限
visudo
# 第100行
alanchan ALL=(ALL) ALL
3、上传压缩包并解压将es的安装包下载并上传到server1做事器的/usr/local/tools路径下,然后进行解压利用alanchan用户来实行以下操作,将es安装包上传到server1做事器,并利用es用户实行以下命令解压。
4、修正配置文件1)、修正elasticsearch.ymlserver1做事器利用alanchan用户来修正配置文件
cd /usr/local/bigdata/elasticsearch-7.6.1/config
mkdir -p /usr/local/bigdata/esdata
rm -rf elasticsearch.yml
vim elasticsearch.yml
cluster.name: alan-application
node.name: server1
path.data: /usr/local/bigdata/esdata
path.logs: /usr/local/bigdata/elasticsearch-7.6.1/log
network.host: server1
http.port: 9200
discovery.seed_hosts: ["server1", "server2", "server3"]
cluster.initial_master_nodes: ["server3", "server2"]
bootstrap.memory_lock: false
bootstrap.system_call_filter: false
http.cors.enabled: true
http.cors.allow-origin: ""
2)、修正jvm.option修正jvm.option配置文件,调度jvm堆内存大小server1利用alanchan用户实行以下命令调度jvm堆内存大小,每个人根据自己做事器的内存大小来进行调度。
cd /usr/local/bigdata/elasticsearch-7.6.1/config
vim jvm.options
-Xms2g
-Xmx2g
5、将安装包分发到其他做事器上面server1利用alanchan用户将安装包分发到其他做事器上面去
6、server2与server3修正es配置文件server2利用alanchan用户实行以下命令修正es配置文件
mkdir -p /usr/local/bigdata/esdata
# 修正配置文件
cd /usr/local/bigdata/elasticsearch-7.6.1/config
vim elasticsearch.yml
node.name: server2
network.host: server2
#server3利用alanchan用户实行以下命令修正配置文件
#创建数据目录
mkdir -p /usr/local/bigdata/esdata
#修正配置文件
cd /usr/local/bigdata/elasticsearch-7.6.1/config
vim elasticsearch.yml
node.name: server3
network.host: server3
7、修正系统配置,办理启动时候的问题由于现在利用普通用户来安装es做事,且es做事对做事器的资源哀求比较多,包括内存大小,线程数等。以是须要给普通用户解开资源的束缚
1)、普通用户打开文件的最大数限定问题缺点信息描述:
maxfile descriptors [4096] for elasticsearch process likely too low, increase toat least [65536]
ES由于须要大量的创建索引文件,须要大量的打开系统的文件,以是我们须要解除linux系统当中打开文件最大数目的限定,不然ES启动就会抛错
三台机器利用alanchan用户实行以下命令解除打开文件数据的限定
sudo vi /etc/security/limits.conf
#添加如下内容: 把稳不要去掉了
soft nofile 65536
hard nofile 131072
soft nproc 2048
hard nproc 4096
此文件修正后须要重新登任命户,才会生效
2)、普通用户启动线程数限定问题缺点信息描述
maxnumber of threads [1024] for user [es] likely too low, increase to at least[4096]
修正普通用户可以创建的最大线程数
max number ofthreads [1024] for user [es] likely too low, increase to at least [4096]
缘故原由:无法创建本地线程问题,用户最大可创建线程数太小办理方案:修正90-nproc.conf 配置文件。
三台机器利用alanchan用户实行以下命令修正配置文件
Centos6
sudo vi /etc/security/limits.d/90-nproc.conf
Centos7
sudo vi /etc/security/limits.d/20-nproc.conf
#找到如下内容:
soft nproc 1024
#修正为
soft nproc 4096
3)、普通用户调大虚拟内存缺点信息描述:
maxvirtual memory areas vm.max_map_count [65530] likely too low, increase to atleast [262144]
调大系统的虚拟内存
缘故原由:最大虚拟内存太小
每次启动机器都手动实行下。
三台机器实行以下命令
实行下面命令
sudo sysctl -w vm.max_map_count=262144
#修正配置文件
sudo vim /etc/sysctl.conf
#在末了添加一行
vm.max_map_count=262144
#立即生效
sysctl -p
#查看修正结果
sysctl -a|grep vm.max_map_count
[alanchan@server1 ~]$ sudo sysctl -a|grep vm.max_map_count
vm.max_map_count = 262144
备注:以上三个问题办理完成之后,重新连接secureCRT或者重新连接xshell生效
8、启动ES做事三台机器利用alanchan用户实行以下命令启动es做事
nohup /usr/local/bigdata/elasticsearch-7.6.1/bin/elasticsearch 2>&1 &
[alanchan@server3 ~]$ jps
3973 Elasticsearch
9975 Jps
启动成功之后jsp即可看到es的做事进程,并且访问页面http://server1:9200/?prettyhttp://server2:9200/?prettyhttp://server3:9200/?pretty能够看到es启动之后的一些信息
三、Elasticsearch-head插件elasticsearch-head这个插件是es供应的一个用于图形化界面查看的一个插件工具,可以安装上这个插件之后,通过这个插件来实现通过浏览器查看es当中的数据
安装elasticsearch-head这个插件这里供应两种办法进行安装
第一种办法便是自己下载源码包进行编译,耗时比较长
第二种办法便是直策应用我已经编译好的安装包,进行修正配置即可
要安装elasticsearch-head插件,须要先安装Node.js
三、Elasticsearch-head插件elasticsearch-head这个插件是es供应的一个用于图形化界面查看的一个插件工具,可以安装上这个插件之后,通过这个插件来实现通过浏览器查看es当中的数据
安装elasticsearch-head这个插件这里供应两种办法进行安装
第一种办法便是自己下载源码包进行编译,耗时比较长
第二种办法便是直策应用我已经编译好的安装包,进行修正配置即可
要安装elasticsearch-head插件,须要先安装Node.js
1)、下载安装包server1机器实行以下命令下载安装包,然后进行解压
cd /usr/local/tools
wget https://npm.taobao.org/mirrors/node/v8.5.0/node-v8.5.0-linux-x64.tar.gz
tar -zxvf node-v8.5.0-linux-x64.tar.gz -C /usr/local/bigdata
2)、创建软连接server1实行以下命令创建软连接
sudo ln -s /usr/local/bigdata/node-v8.5.0-linux-x64/lib/node_modules/npm/bin/npm-cli.js /usr/local/bin/npm
sudo ln -s /usr/local/bigdata/node-v8.5.0-linux-x64/bin/node /usr/local/bin/node
3)、修正环境变量server1做事器添加环境变量
vim /etc/profile
export NODE_HOME=/usr/local/bigdata/node-v8.5.0-linux-x64
export PATH=:$PATH:$NODE_HOME/bin
修正完环境变量利用source生效
4)、验证安装成功server1实行以下命令验证安装生效
node -v
npm -v
[alanchan@server3 bigdata]$ node -v
v8.5.0
[alanchan@server3 bigdata]$ npm -v
5.3.0
2、在线安装(不推举)这里选择server1进行安装
1)、在线安装必须依赖包# 初始化目录
cd /usr/local/bigdata/es
# 安装GCC
sudo yum install -y gcc-c++ make git
2)、从git上面克隆编译包并进行安装cd /usr/local/bigdata
git clone https://github.com/mobz/elasticsearch-head.git
# 进入安装目录
cd /usr/local/bigdata/elasticsearch-head
# intall 才会有 node-modules
npm install
以下进度信息
npm WARN notice [SECURITY] lodash has thefollowing vulnerability: 1 low. Go here for more details:
npm WARN notice [SECURITY] debug has thefollowing vulnerability: 1 low. Go here for more details:https://nodesecurity.io/advisories?search=debug&version=0.7.4 - Run `npm inpm@latest -g` to upgrade your npm version, and then `npm audit` to get moreinfo.
npm ERR! Unexpected end of input at 1:2096
npm ERR!7c1a1bc21c976bb49f3ea","tarball":"https://registry.npmjs.org/safer-bu
npm ERR! ^
npm ERR! A complete log of this run can befound in:
npm ERR! /home/es/.npm/_logs/2018-11-27T14_35_39_453Z-debug.log
以上缺点可以不用管。
3)、server1机器修正Gruntfile.js第一台机器修正Gruntfile.js这个文件
cd /usr/local/bigdata/elasticsearch-head
vim Gruntfile.js
#找到以下代码:
#添加一行: hostname: '192.168.10.41',
connect: {
server: {
options: {
hostname:'192.168.10.41',
port: 9100,
base: '.',
keepalive:travelue
}
}
}
4)、server1机器修正app.js第一台机器修正app.js
cd /usr/local/bigdata/elasticsearch-head/_site
vim app.js
#变动前:
http://localhost:9200
#变动后:
http://server1:9200
3、本地安装(推举)1)、上传压缩包到/usr/local/tools路径下将压缩包 elasticsearch-head-compile-after.tar.gz 上传到server1机器的/usr/local/tools路径下面去
2)、解压安装包server1实行以下命令解压安装包
cd /usr/local/tools
tar -zxvf elasticsearch-head-compile-after.tar.gz -C /usr/local/bigdata
3)、server1机器修正Gruntfile.js修正Gruntfile.js这个文件
cd /usr/local/bigdata/elasticsearch-head
vim Gruntfile.js
找到代码中的93行:hostname:'192.168.100.100', 修正为:server1
connect: {
server: {
options: {
hostname: 'server1',
port: 9100,
base: '.',
keepalive: true
}
}
}
4)、server1机器修正app.jsserver1机器修正app.js
cd /usr/local/bigdata/elasticsearch-head/_site
vim app.js
第4354行,http://localhost:9200修正为自己的ip
this.base_uri = this.config.base_uri || this.prefs.get("app-base_uri") || "http://server1:9200";
5)、启动head做事server1启动elasticsearch-head插件
cd /usr/local/bigdata/elasticsearch-head/node_modules/grunt/bin/
#进程前台启动命令
./grunt server
[alanchan@server1 bin]$ ./grunt server
Running "connect:server" (connect) task
Waiting forever...
Started connect web server on http://server1:9100
#进程后台启动命令
nohup ./grunt server >/dev/null 2>&1 &
#如何停滞:elasticsearch-head进程
#实行以下命令找到elasticsearch-head的插件进程,然后利用kill -9 杀去世进程即可
netstat -nltp | grep 9100
kill -98328
4、访问elasticsearch-head界面打开Google Chrome访问http://server1:9100
四、安装IK分词器
须要利用Elasticsearch来进行中文分词,以是须要单独给Elasticsearch安装IK分词器插件。
以下为详细安装步骤:
1、下载Elasticsearch IK分词器https://github.com/medcl/elasticsearch-analysis-ik/releases
2、创建ik目录切换到alanchan用户,并在bigdata的安装目录下/plugins创建ik
mkdir -p /usr/local/bigdata/elasticsearch-7.6.1/plugins/ik
3、解压分词器将下载的ik分词器上传并解压到该目录
cd /usr/local/bigdata/elasticsearch-7.6.1/plugins/ik
sudo rz
unzip elasticsearch-analysis-ik-7.6.1.zip
4、分发将plugins下的ik目录分发到每一台做事器
cd /usr/local/bigdata/elasticsearch-7.6.1/plugins
scp -r ik/ server2:$PWD
scp -r ik/ server3:$PWD
5、重启Elasticsearch关闭进程kill 进程号启动
nohup /usr/local/bigdata/elasticsearch-7.6.1/bin/elasticsearch 2>&1 &
6、测试分词器本示例用VS code进行测试
1)、安装ES插件2)、设置ES做事器地址
3)、验证标准分词器post _analyze
{
"analyzer":"standard",
"text":"我爱你中国"
}
4)、验证IK分词器五、Elasticsearch中的核心观点
1、索引 index一个索引便是一个拥有几分相似特色的文档的凑集。比如说,可以有一个客户数据的索引,另一个产品目录的索引,还有一个订单数据的索引
一个索引由一个名字来标识(必须全部是小写字母的),并且当我们要对对应于这个索引中的文档进行索引、搜索、更新和删除的时候,都要利用到这个名字
在一个集群中,可以定义任意多的索引。
2、映射 mappingElasticSearch中的映射(Mapping)用来定义一个文档mapping是处理数据的办法和规则方面做一些限定,如某个字段的数据类型、默认值、剖析器、是否被索引等等,这些都是映射里面可以设置的3、字段Field
相称于是数据表的字段,对文档数据根据不同属性进行的分类标识
4、类型 Type每一个字段都该当有一个对应的类型,例如:Text、Keyword、Byte等
5、文档 document一个文档是一个可被索引的根本信息单元。比如,可以拥有某一个客户的文档,某一个产品的一个文档,当然,也可以拥有某个订单的一个文档。文档以JSON(Javascript Object Notation)格式来表示,而JSON是一个到处存在的互联网数据交互格式
6、集群 cluster一个集群便是由一个或多个节点组织在一起,它们共同持有全体的数据,并一起供应索引和搜索功能
一个集群由一个唯一的名字标识,这个名字默认便是“elasticsearch”
这个名字是主要的,由于一个节点只能通过指定某个集群的名字,来加入这个集群
7、节点 node一个节点是集群中的一个做事器,作为集群的一部分,它存储数据,参与集群的索引和搜索功能
一个节点可以通过配置集群名称的办法来加入一个指定的集群。默认情形下,每个节点都会被安排加入到一个叫做“elasticsearch”的集群中,这意味着,如果在网络中启动了多少个节点,并假定它们能够相互创造彼此,它们将会自动地形成并加入到一个叫做“elasticsearch”的集群中
在一个集群里,可以拥有任意多个节点。而且,如果当前网络中没有运行任何Elasticsearch节点,这时启动一个节点,会默认创建并加入一个叫做“elasticsearch”的集群。
8、分片和副本 shards&replicas1)、分片一个索引可以存储超出单个结点硬件限定的大量数据。比如,一个具有10亿文档的索引霸占1TB的磁盘空间,而任一节点都没有这样大的磁盘空间;或者单个节点处理搜索要求,相应太慢。为理解决这个问题,Elasticsearch供应了将索引划分成多份的能力,这些份就叫做分片。
当创建一个索引的时候,可以指定你想要的分片的数量
每个分片本身也是一个功能完善并且独立的“索引”,这个“索引”可以被放置到集群中的任何节点上
分片很主要,紧张有两方面的缘故原由
许可水平分割/扩展你的内容容量
许可在分片之上进行分布式的、并行的操作,进而提高性能/吞吐量
至于一个分片若何分布,它的文档若何聚合回搜索要求,是完备由Elasticsearch管理的,对付作为用户来说,这些都是透明的
2)、副本在一个网络/云的环境里,失落败随时都可能发生,在某个分片/节点不知怎么的就处于离线状态,或者由于任何缘故原由消逝了,这种情形下,有一个故障转移机制是非常有用并且是强烈推举的。为此目的,Elasticsearch许可创建分片的一份或多份拷贝,这些拷贝叫做副本分片,或者直接叫副本
副本之以是主要,有两个紧张缘故原由
在分片/节点失落败的情形下,供应了高可用性。把稳到复制分片从不与原/紧张(original/primary)分片置于同一节点上是非常主要的
扩展搜索量/吞吐量,由于搜索可以在所有的副本上并走运行。每个索引可以被分成多个分片。一个索引有0个或者多个副本
一旦设置了副本,每个索引就有了主分片和副本分片,分片和副本的数量可以在索引创建的时候指定在索引创建之后,可以在任何时候动态地改变副本的数量,但是不能改变分片的数量
以上,先容了Elasticsearch的功能、运用处景,也先容了其2种支配办法,同时先容了head插件和分词器的安装,末了先容了Elasticsearch的几个核心观点,该观点是后续利用的根本。