什么是es(elasticSearch)?
我的理解es是一个数据库或者成为中间件,是一个用RESTful进行增删改查的数据库;这种数据库多是用于搜索。而这种搜索有别于关系型数据库的搜索。------------倒排索引搜索
关于倒排索引可以这么理解:我们以前是通过歌名找歌曲,倒排索引是实现通过歌词找歌曲。即通过内容对找搜索对象。
es的基本技术是Lucene,一个java写的全文检索开源工具。
ElasticSearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。Elasticsearch是用Java开发的,并作为Apache许可条款下的开放源码发布,是当前流行的企业级搜索引擎。设计用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。我们建立一个网站或应用程序,并要添加搜索功能,但是想要完成搜索工作的创建是非常困难的。我们希望搜索解决方案要运行速度快,我们希望能有一个零配置和一个完全免费的搜索模式,我们希望能够简单地使用JSON通过HTTP来索引数据,我们希望我们的搜索服务器始终可用,我们希望能够从一台开始并扩展到数百台,我们要实时搜索,我们要简单的多租户,我们希望建立一个云的解决方案。因此我们利用Elasticsearch来解决所有这些问题及可能出现的更多其它问题。------来自于知乎
小结:
es的特点:
es使用的场景:
solr与es都是Apache下的项目,也都是Lucene作为基础。solr产生比的es早一些。
solr:
Solr 是 Apahce下的顶级开源项目,Java开发的,也是基于Lucene封装的全文搜索服务器。
Solr 提供的功能:大量的配置、索引进行了优化。
Solr 独立运行的服务器
Solr 使用方式:Post 方法发送一个 请求 Xml 文档、 添加、删除、更新。。。。 GET 请求来进行查询
(Xml, json数据)
es:
ElasticSearch 是一个实时分布式搜索和分析引擎,在大数据领域使用十分广泛。
比如百度搜索高亮,商品搜索.....
实时搜索,效率十分高(倒排索引)
ElasticSearch 是一个基于 Apahce Lucene下的开源搜索引擎。
图表来自百度图片:
下载资源。(docker支持7.7.0)
config里是配置,这里windows和linux通用。这里可以将内存改小一点
bin目录下打开cmd执行elasticsearch就行了
其他的也都是解压以后通过npm进行安装npm install
或者直接到bin下双击.bat文件
建议不要用1核的。
下载包放入opt文件夹进行解压。
选择elasticsearch。
我们就新建一个用户
# 创建用户
useradd es
#给es用户权限 不然会出现.AccessDeniedException: /opt/elasticsearch-7.6.1/config/jvm.options 错误 我没有下载jdk所以使用es内部自带的jdk。
# 给es授权
chown -R es:es /opt/elasticsearch-7.6.1/
# su到新用户下面
sudo su es
--------------------------------------------------------------------------
# 如果是用的阿里云建议首先修改root的密码
sudo passwd root #修改root用户的密码 此时必须是root用户
此时es运行起来了
我们通过linux内部的curl访问:
内部启动起来
不过外部不能访问:
确保防火墙和阿里安全组已经开启9200和9300端口。
我们需要改变绑定的ip地址,使得es可以公网访问(这是测试需要,正式上线慎重)。
config里面有一个es的yml文件。
运行后依然不行。在es的日志目录下查看日志elasticsearch.log 看到这一条:
bootstrap加载出错。我们知道bootstrap是jvm底层的加载器。包了底层空间不足,所以我们要增加空间。
# 修改最大限制
vi /etc/secuirty/limits.conf
#加入
* soft nproc 2048
* hard nproc 4096
# 系统配置
vi /etc/sysctl.conf
#添加配置
vm.max_map_count=262145
查看结果
system -p
启动又报错:
[1]: the default discovery settings are unsuitable for production use; at least one of [discovery.seed_hosts, discovery.seed_providers, cluster.initial_master_nodes] must be configured
#说配置文件属性必须设置
# 修改ES config目录下的elasticsearch.yml
vi elasticsearch.yml
cluster.name: icoding-es #给集群设置一个名字,如果是集群,所有在这个集群中的节点集群名都要一样
node.name: es-node-1 #如果是集群,集群中每个节点的名字都不能一样
path.data: /usr/local/elasticsearc/mkdata
path.logs: /usr/local/elasticsearc/mklogs
network.host: 0.0.0.0 #外网访问
http.port: 9200 #服务端口,通信端口是9300
cluster.initial_master_nodes: ["es-node-1"] #master节点服务发现,和上面的节点名一致
再次运行通过外网访问
可以访问了
下来安装head和kibana
# 安装node
yum install -y nodejs
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ix0Gjwci-1590413998556)(images\image-20200525191315665.png)]
elasticsearch-head
GitHub: https://github.com/mobz/elasticsearch-head
#获得zip包
#到head目录下 要能看到json
cd elasticsearch-head
npm install --registry=https://registry.npm.taobao.org
npm run start
# 启动后本地访问及端口:http://localhost:9100
通过curl访问正常
安装完毕后访问会提升不允许跨域
# No 'Access-Control-Allow-Origin'
# 在elasticsearch.yaml里加入
http.cors.enabled: true
http.cors.allow-origin: "*"
# 下载地址
https://artifacts.elastic.co/downloads/kibana/kibana-7.5.2-linux-x86_64.tar.gz
vi kibana.yml
server.host: "0.0.0.0"
elasticsearch.hosts: ["http://192.168.0.143:9200"]
# 进入bin目录
# Kibana should not be run as root. Use --allow-root to continue.
# chown -R esuser:esuser /usr/local/software/kibana-7.5.2-linux-x86_64
# 端口默认是5601
./kibana
nohup ./kibana &
注意依然不能是root用户启动
给es用户设置权限,启动。
从公网访问5601端口
如果觉得英语看不懂,在config里面的yml文件,最后一行是i18n国家化
i18n-local: "zh-CN"
搭建成功了