ElasticSearch

108 阅读3分钟

ElasticSearch

基础概念

Elasticsearch是java语⾔开发的基于Lucene的搜索引擎。Elasticsearch是⾯向⽂档型数据库,⼀条数据在这⾥就是⼀个⽂档,⽤JSON作为⽂档序列化的格式,⽐如下⾯这条⽤户数据:
{
   "name" :     "John",
   "sex" :      "Male",
   "age" :      25,
   "birthDate": "1990/05/01",
   "about" :    "I love to go rock climbing",
   "interests": [ "sports", "music" ]
}

ES应⽤场景

为⽤户提供按关键字查询的全⽂搜索功能。
著名的ELK框架(ElasticSearch,Logstash,Kibana),实现企业海量⽇志的处理分析的解决⽅案。⼤数据领域的重要⼀份⼦。

ES安装

rpm安装

0.安装位置/环境
//给elasticsearch赋予读写权限
chmod 777 elasticsearch
//给elasticsearch及其以下⼦⽬录赋予读写权限
chmod -R 777 elasticsearch
1. 下载
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-5.2.2.tar.gz
解压
tar -zxvf elasticsearch-5.2.2.tar.gz
rpm安装:
rpm -ivh elasticsearch-5.6.4.rpm
找到es服务:
systemctl list-unit-files |grep elastic
打开es服务:
systemctl enable elasticsearch.service
配置JAVA_HOME:
vim /etc/sysconfig/elasticsearch
启动es服务
systemctl start elasticsearch.service
启动之后查看es状态:
systemctl status elasticsearch.service
查看es进程:
ps -ef |grep elastic

docker安装

1. docker镜像下载
docker pull elasticsearch:5.6.8
2.安装es容器
docker run -di --name=kkb_es -p 9200:9200 -p 9300:9300 elasticsearch:5.6.8
9200端⼝(Web管理平台端⼝) 9300(服务默认端⼝)
浏览器输⼊地址访问: http://192.168.106.130:9200
3.开启远程连接
# 1. 登录容器
docker exec -it kkb_es /bin/bash
# 2. 安装vim编辑器
apt-get update
apt-get install vim
# 3. 修改elasticsearch.yml配置:
vi config/elasticsearch.yml
cluster.name: my-es
transport.host: 0.0.0.0
http.cors.enabled: true # 允许elasticsearch跨域访问,默认false
http.cors.allow-origin: "*" # 允许任意域名跨域访问
network.host: 192.168.106.130

倒排索引

倒排索引(Inverted Index)也叫反向索引,有反向索引必有正向索引。通俗地来讲,正向索引是通过key找value,反向索引则是通过value找key。
Term(单词):⼀段⽂本经过分析器分析以后就会输出⼀串单词,这⼀个⼀个的就叫做Term(直译为:单词)
Term Dictionary(单词字典):顾名思义,它⾥⾯维护的是Term,可以理解为Term的集合
Term Index(单词索引):为了更快的找到某个单词,我们为单词建⽴索引Posting List(倒排列表):倒排列表记录了出现过某个单词的所有⽂档的⽂档列表及单词在该⽂档中出现的位置信息,每条记录称为⼀个倒排项(Posting)。根据倒排列表,即可获知哪些⽂档包含某个单词。(PS:实际的倒排列表中并不只是存了⽂档ID这么简单,还有⼀些其它的信息,⽐如:词频(Term出现的次数)、偏移量(offset)等,可以想象成是Python中的元组,或者Java中的对象)
(PS:如果类⽐现代汉语词典的话,那么Term就相当于词语,Term Dictionary相当于汉语词典本身,Term Index相当于词典的⽬录索引)
关系型数据库通过增加⼀个 索引 ⽐如⼀个 B树(B-tree)索引 到指定的列上,以便提升数据检索速度。
Elasticsearch 和 Lucene 使⽤了⼀个叫做 倒排索引 的结构来达到相同的⽬的。
默认的,⼀个⽂档中的每⼀个属性都是 被索引 的(有⼀个倒排索引)和可搜索的。⼀个没有倒排索引的属性是不能被搜索到的