Open Source,Distributed.RESTful Search Engine 开源的,分布式,RESTful搜索引擎;
2004年,一个叫Shay Banon的宠妻狂魔.因为妻子要去伦敦学习厨师,为妻子开发一个搜索食谱的搜索引擎,基于Lucene开发发布了第一个开源项目.叫做"Compass"
2010年,由于Shay Banon工作需要高性能的,实时的,分布式的搜索,基于Compass重写成为了独立的服务Elasticsearch.
2010年2月,Elasticsearch第一个版本发布
2010年2月,Elasticsearch第一个版本发布;
2012年2月,Elasticsearch 1.0发布,同时成立Elastic公司 (创业)
2015年10月,Elasticsearch 2.0发布
2016年10月,Elasticsearch 5.0发布,至少需要jdk1.8
2017年8月,Elasticsearch 6.0发布
2019年8月,Elasticsearch 7.0发布
现在最新版本,Elasticsearch 7.6.2 (2020年5月)
1、维基百科,类似百度百科,全文检索;
2、Stack Overflow国外的程序异常问答网站;
3、GitHub 开源代码管理,搜索上千亿行代码;
4、携程机票
5、去哪儿订单中心
6、滴滴打车地图搜索
......
Github: https://github.com/elastic
基于关系型数据库无法满足日益增加的搜索需求,有诸多不足和局限,搜索引擎框架解决了基于数据库搜索的不足,实现了分布式,高可用,高性能搜索
Solr是第一个基于Lucene核心库功能完备的搜索引擎产品,诞生早于Elasticsearch,早期在全文搜索领域,Solr有非常大的优势,在近几年大数据发展时代,Elastic由于其分布式特性,满足了很多PB级大数据的处理需求,特别是后面ELK三大组合的流行,Solr使用量逐渐下跌;
ElasticSearch和Solr均起源于Lucene,Lucene是基于Java语言开发的搜索引擎库类(jar包)创建于1999年,2005年成为Apache顶级开源项目,Lucene具有高性能、但易扩展有局限性,只能单机环境,而且只能基于Java语言开发,其他php、python等不能使用;
类库的接口学习曲线陡峭,原生并不支持水平扩展;
自己开发一个完整的搜索引擎工作量比较大,必须要懂一些搜索引擎原理的人才能用好,所以后来elasticsearch基于lucene进行封装,支持分布式,可水平扩展,降低全文检索的学习曲线,基于http restful api可以被任何编程语言调用;
在了解Elasticsearch之前,有必要介绍两个基本概念
倒排索引和分词器(ik分词器)
假设我们数据库存储了三条数据 key:1 value:我是程序猿 分词-> 我 是 程序 程序猿 key:2 value:我爱编程 分词-> 我 爱 编程 key:3 value:我会用Java写增删改查程序代码 分词-> 我 会用 java 写 增删改查 程序 代码
那么全文检索底层是如何做的呢?
首先进行分词,然后把我们分的词当做索引
我 : 1,2,3
程序: 1,3
代码: 3
这样当我们去全文检索 程序,此刻就可以查出 key(或者称作id) 1,3,搜索引擎的思想大致就是这样去实现的
下载: https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.6.2-linux-x86_64.tar.gz 解压缩 tar -zxvf elasticsearch-7.6.2-linux-x86_64.tar.gz
下图为解压后的目录结构
下面需要做一系列配置,否则在启动时候日志报错,需要我们注意
目录里面包含有JDK,7.6.2版本JDK是13,运行最低需要JDK11的版本,所以我们的配置里面如果配置的是JDK8版本,需要配置一下JDK,
cd elasticsearch-7.6.2/bin/
vim elasticsearch-env
这样就配置使用es自带的JDK,而不会使用我们配置的全局环境变量
若无非root用户,按下面步骤创建
1.useradd es 创建用户
2.passwd es 给已创建的用户testuser设置密码(密码设置不能少于8个字符,最好不要连续数字或者字符),确认时重输一次密码即可
chown es:es -R /usr/local/elasticsearch
config目录下jvm.options修改 -Xms512m -Xmx512m
vim elasticsearch.yml
修改数据和日志目录:此处需要给予用户足够权限 chmod -R 777 /home/es
path.data: /home/es/elasticsearch/data # 数据目录位置
path.logs: /home/es/elasticsearch/logs # 日志目录位置
network.host: 0.0.0.0 # 绑定到0.0.0.0,允许任何ip来访问
默认只允许本机访问,修改为0.0.0.0后则可以远程访问
vim /etc/security/limits.conf 添加到文件最后,若想生效,需重启linux * soft nofile 65536 * hard nofile 131072 * soft nproc 2048 * hard nproc 4096
vim /etc/sysctl.conf 添加vm.max_map_count=655360,永久修改
执行 sysctl -p
把 discovery.seed_hosts 注释打开,写上当前主节点的IP;(cluster.name && node.name && cluster.initial_master_nodes后续使用客户端也需要打开)
在bin目录下启动,启动需要切换非root用户启动
./elasticsearch 前台运行
./elasticsearch -d 后台运行
出现started时启动完成
关闭 kill pid
Elasticsearch端口9300、9200
9300是tcp通讯端口,集群ES节点之间通讯使用;
9200是http协议的RESTful接口
Elasticsearch的客户端工具
ealsticsearch只是后端提供各种resulful api,看数据并不直观,所以建议安装客户端插件,elasticsearch-head安装包
下载地址:https://github.com/mobz/elasticsearch-head
zip包下载: https://codeload.github.com/mobz/elasticsearch-head/zip/master
npm: Nodejs下的包管理器;
推荐从此处下载:https://npm.taobao.org/mirrors/ (也可下载12版本,运行过程中本人发现部分版本npm 不支持13版本,改为12也可以 )
直接下载: https://cdn.npm.taobao.org/dist/node/latest-v13.x/node-v13.0.0-linux-x64.tar.gz
解压:tar -zxvf node-v13.0.0-linux-x64.tar.gz
mv node-v13.0.0-linux-x64 node-v13.13.0
配置nodejs环境变量
vim /etc/profile 在path中加入 /usr/local/node-v13.0.0/bin即可; export PATH=/usr/local/node-v13.0.0/bin source /etc/profile 验证:
node -v npm -v
Npm环境准备好了之后,开始安装elasticsearch-head
解压:unzip elasticsearch-head-master
cd elasticsearch-head-master
npm install
(如果执行失败,可以cnpm install,使用cnpm之前需要安装cnpm,通过npm install -g cnpm --registry=https://registry.npm.taobao.org该命令安装;cnpm -v)
npm run start (npm run-script start)
可以后台启动:nohup npm run-script start &
npm -l 显示所有使用帮助信息
然后访问: http://localhost:9100/
此处需要注意 elasticsearch.yml注释需要放开
cluster.name
node.name
cluster.initial_master_nodes
如果一切配置没有问题,我们访问9100端口,客户端的功能就不一一介绍了,多点击点击就能够明白大概
Kibana的版本要和elasticsearch版本一致;测试工具其实可以用很多种:postman、curl、head、浏览器插件、kibana; Github https://github.com/elastic/kibana 下载:https://www.elastic.co/downloads/kibana 下载下来是一个压缩包,解压即可; 启动,进入bin目录 ./kibana 汉化:./config/kibana.yml 里面修改i18n.defaultLocale: "zh-CN"
kibana也不允许root启动,指定centos用户启动 chown es:es -R /usr/local/kibana ./kibana -h 命令帮助 启动命令: ./kibana 或者 ./kibana serve 后台启动: nohup /usr/local/kibana-7.6.2/bin/kibana & 访问: http://192.168.194.128:5601 远程访问kibana界面被拒绝 将$KIBANA/config/kibaba.yml下的 server.host: "localhost" 更改为server.host: "0.0.0.0" 即可;
PUT /test PUT /test/_doc/1 { "name" : "doc1", "desc" : "this is doc1" } PUT /test/_doc/2 { "name" : "doc2", "desc" : "this is doc2" } 查询 GET /test/_doc/doc1 GET /test/_doc/doc2
关于Elasticsearch的深入讲解, 未完待续...在此感到自身博客界面排版太难,有比较好方式的欢迎推荐
原文:https://www.cnblogs.com/zhaoletian/p/12868159.html