搜索引擎——ElasticSearch基础篇
一、什么是搜索引擎
Solr?ES?不是我们说的搜索引擎;
搜索引擎是一个整体的技术体现,是一个全方位技术的简称,可以理解成一个架构,是一系列的检索服务,分为:全文检索与垂直检索;
例如:百度、大型电商的检索,都是属于搜索引擎范围;
百度:全文检索,针对全网,所有的关键词或字;
电商的检索:垂直检索,针对某个专业的领域,例如商品、品牌等;
二、ElasticSearch
2.1)什么是ElasticSearch
是搜索引擎中最流行的一个存储框架,是一个分布式的索引库;是一个NoSQL数据库;简称“ES”;
可以对外提供检索服务,支持HTTP、Transport协议对外部提供检索;
- HTTP:基于Restful的Json;
- Transport:在ES7.0的时候被废弃;
ES仅仅是一个框架,一个NoSQL的数据;
2.2)ElasticSearch的名词定义
虽然ElasticSearch是一个数据库;
索引:类似于数据库,在真正意义上应该被定义为“索引”;创建数据其实就是在创建索引;
类型:一个Type,在数据库中被成为表,但是在ES中被定义为“类型(Type)”;在ES6.x之后有且只有一个Type,之前的版本可以创建多个;在ES7.x被废弃;
文档:一个数据,在数据库中被成为“行数据”;类似于Mongodb;
filed:一个字段,就是一个列;
Mapping:字段的类型,在数据库中对应的就是指定的数据类型(varchar、int等);ES中不指定Mapping依然可以存数据,因为ES会给你智能匹配一个;
缺点:nosql非关系型,没有办法链接查询,也就是跨索引查询;
三、分词
NLP:被成为“自然语言处理”;
分词是搜索引擎的基石,如果一个搜索引擎没有好的分词器,那么这个搜索引擎必然是失败的;
搜索是以词作为最小单元,依靠分词器进行构建,最后会生成一个倒序索引;
四、索引类型归类
索引类型分为:倒排索引及正向索引;
假设一个典型的Map数据结构:Key——>Value;
在常规操作下,要查找一个值的做法:select * from talbe where name like '%A%';
这样做的问题是不能走索引,不能高效的定位数据;
4.1)倒排索引
通过Value找Key;通过分词找到对应存储Key;
案例:新华字典查询某字,在目录页,先通过笔画、拼音找到需要查找的字,然后再确定到某一页;
4.2)正向索引
通过Key找Value;其实就是我们的Map查找方式;
五、TF-IDF
5.1)TF
词频,一篇DOC中包含了多少个词,包含越多表示越相关;
5.2)DF
文档频率;包含关键词的文档个数;
5.3)IDF
是DF的反向,也就是1/DF;包含关键词的文档越少,表示DF越小,IDF越大,说明关键词对这篇文章重要性越大;
5.4)TFIDF
TF*IDF;表示如果关键词在一篇文章中出现的TF(帧率)高,并且在其他文章中很少出现,则认为此关键词具有很好的类别区分能力;
搜索引擎的排序规则:TFIDF越大,排序越靠前;
六、ElasticSearch环境搭建
6.1)JDK1.8
如果是阿里云,可能自带openJdk,需要先进行卸载;
rpm -qa|grep java
rpm -e -nodeps *
6.2)安装ElasticSearch
安装版本:6.6.0
https://elasticsearch.cn/download/
https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.6.0.tar.gz
下载地址:百度搜索ES 中文社区;
http://elasticsearch.cn/topic/elasticsearch?rf=6
6.3)修改内核配置参数
vim /etc/sysctl.conf
添加如下内容:
fs.file-max=65536
vm.max_map_count=262144
刷新配置文件:sysctl -p
查看配置文件是否生效:sysctl -a
如果启动依旧失败(启动es还是失败,不是所有人都碰得到,好像是在7.6碰到了),运行下面的命令:
rm -f /sbin/modprobe
ln -s /bin/true /sbin/modprobe
rm -f /sbin/sysctl
ln -s /bin/true /sbin/sysctl
6.4)设置资源参数
vi /etc/security/limits.conf
添加如下内容——注意“*”必须要有:
* soft nofile 65536
* hard nofile 131072
* soft nproc 2048
* hard nproc 4096
6.5)修改进程数
vi /etc/security/limits.d/20-nproc.conf
* soft nproc 4096
对于某些系统而言:配置完成后要关闭链接,重新打开才能生效;
不能使用root用户启动:因为安全问题会出现:can not run elasticsearch as root异常,切记:新建用户后一定要分配权限,否则权限不够无法启动;
6.6)ElasticSearch配置文件
/apps/svr/elasticsearch-6.6.0/config/
# 配置es的集群名称, es会自动发现在同一网段下的es,如果在同一网段下有多个集群,就可以用这个属性来区分不同的集群。
cluster.name: bi-cluster
# 节点名称
node.name: node-master
# 存储数据的目录
path.data: /home/elasticsearch/data
# 存储日志的目录
path.logs: /home/elasticsearch/logs
# 设置绑定的ip地址还有其它节点和该节点交互的ip地址
network.host: 0.0.0.0
# 指定http端口,你使用head、kopf等相关插件使用的端口
http.port: 9200
# 设置节点间交互的tcp端口,默认是9300
transport.tcp.port: 9300
#设置集群中master节点的初始列表,可以通过这些节点来自动发现新加入集群的节点。
discovery.zen.ping.unicast.hosts: ["10.108.4.203:9300", "10.108.4.204:9300", "10.108.4.205:9300"]
#如果没有这种设置,遭受网络故障的集群就有可能将集群分成两个独立的集群 - 分裂的大脑 - 这将导致数据丢失
discovery.zen.minimum_master_nodes: 3
http.cors.enabled: true #es5.x版本以上需要,head访问
http.cors.allow-origin: "*"
bootstrap.memory_lock: false #某些系统需要 是因为centos6.x操作系统不支持SecComp,而elasticsearch 5.5.2默认 bootstrap.system_call_filter为true进行检测,所以导致检测失败,失败后直接导致ES不能启动。
bootstrap.system_call_filter: false
6.7)ElasticSearch启动方式
ps aux|grep elas
一般启动方式:./bin/elasticsearch
后台启动方式:./bin/elasticsearch -d
查看方式:http://[服务IP]:[端口]
6.8)启动kibana
注意版本一定要一致,不然会有不可预知的错误;
一般启动:./bin/kibana
后台启动:nohup ./bin/kibana &

浙公网安备 33010602011771号