ElasticSearch
Posted willwillie
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ElasticSearch相关的知识,希望对你有一定的参考价值。
首先问一个问题,数据是一个什么样的概念?
比如我这里有一个csv文件,有65万行数据,每行数据包括20多个字段;这是一个庞大的数据量,大概占用了150兆的磁盘空间,如果我用wps将它加载到内存中,大概也需要这么多的内存。如果你的内存剩余量不够大,可能就没法打开这个文件了;就算内存足够大,这也是内存的一大块了。那么在这么大的数据或者大十倍的数据中查询某一个数据,你要怎么做呢?
再比如我在mysql中存储300万行数据,大概占用1.6个G的存储。
Elasticsearch 是一个实时的分布式搜索和分析引擎;它可以帮助你用前所未有的速度去处理
大规模数据
维基百科使用 Elasticsearch 来进行全文搜索并高亮显示关键词,以及提供search-asyou-
type、did-you-mean等搜索建议功能。
英国卫报使用 Elasticsearch 来处理访客日志,以便能将公众对不同文章的反应实时地反
馈给各位编辑。
StackOverflow 将全文搜索与地理位置和相关信息进行结合,以提供more-like-this相关问
题的展现。
GitHub 使用 Elasticsearch 来检索超过1300亿行代码。
每天,Goldman Sachs 使用它来处理5TB数据的索引,还有很多投行使用它来分析股票
市场的变动。很不幸的是,目前的大部分数据库在提取数据方面都是非常的薄弱的。虽然它们可以通过精
准的时间戳或者确切的数值来进行内容的筛选,但是它们可以在全文搜索时做到同义词或者
相关性搜索吗?他们可以汇总相同内容数据吗?最重要的是,每对如此巨大的数据量,它们
能做到实时处理吗?
这便是 Elasticsearch 如此突出的理由:Elasticsearch 可以帮助你浏览并利用已经快要烂在数
据库里的那些极难查询的数据。
Elasticsearch 是一个建立在全文搜索引擎框架 Apache Lucene(TM) 基础上的开源搜索引擎,但是Lucene非常的难用。你可以轻松地通过客户端或者任何你喜欢的程序语言与 Elasticsearch 的 RESTful API 进行通信。Elasticsearch 的上手是非常简单的。它附带了很多非常合理的默认值,这让初学者很好地避免一上手就要面对复杂的理论。
安装:
JVM环境+解压+配置+运行
插件:在5.0以下的版本,可以通过直接复制插件到plugins目录下的方式,但是在5.0以上的es,插件的安装方法已经变了许多。
所幸通过一番实践,变成了知识的搬运工
ES5新特性
安装问题
插件的访问问题解决
插件安装方法
无法联网的服务器插件安装方法
以及学习elasticSearch的一些资料总结:
官网地址:
github上的好的学习资料之一
不过在这里,我要着重谈一下5.0以上环境的head插件的安装,尤其是在全offline的环境下,当然也只是点到为止。
就像上面的文章描述的那样,要安装es的head,就是安装grunt,配置好head目录下的配置文件,然后在head的root目录下面,运行grunt server就好。
那么在不能联网的生产环境下,就得把在联网环境下安装的grunt拷贝过去,怎么拷贝却是一个技术活。
grunt是用npm安装的,安装的包和依赖都在node_modules目录下,将已安装好环境的node_modules拷贝到比如不能联网的linux系统的/usr/local/lib目录下,然后在/usr/local/bin创建一个软链接grunt指向/usr/local/lib/node_modules下的grunt可执行文件。
因为/usr/local/bin是默认的path目录,然后创建的软链接相当于windows下的快捷方式,实际上会去lib目录下的node_modules去查找相关的可执行文件和依赖。如下:
[vv /usr/local]$ ll lib/node_modules/grunt
total 32
-rw-r--r-- 1 root root 7111 May 4 16:59 CHANGELOG
-rw-r--r-- 1 root root 1592 May 4 16:59 LICENSE
-rw-r--r-- 1 root root 878 May 4 16:59 README.md
drwxr-xr-x 2 root root 4096 May 4 16:59 bin
drwxr-xr-x 4 root root 4096 May 4 16:59 lib
drwxr-xr-x 4 root root 4096 May 4 16:59 node_modules
-rw-r--r-- 1 root root 3770 May 4 16:59 package.json
[vv /usr/local]$ ll bin/grunt
lrwxrwxrwx 1 root root 43 May 4 17:02 bin/grunt -> /usr/local/lib/node_modules/grunt/bin/grunt
当然node和npm可能也需要用类似的方式安装,然后在head的根目录下运行grunt server就可以了。
es快照和恢复
1) 创建共享文件系统以及挂载
工具sshfs
指定一个公共的服务器目录,比如我这里是192.168.1.1:/data/es/repo
在每一个节点执行命令:
sshfs root@192.168.1.1:/data/es/repo /data/es/backup/ -o allow_other
这样就将/data/es/backup/配置为挂载共享文件系统的挂载点了,如下:
[root@TENCENT64 ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda1 9.9G 2.1G 7.3G 23% /
root@192.168.1.1:/data/es/repo
793G 9.9G 742G 2% /data/es/backup
2) 配置文件path.repo
在elasticsearch.yml中加入path.repo的配置:
path.repo: [“/data/es/backup”]
3) 创建仓库
比如我这里创建一个名mybackup的仓库:
curl -XPUT ‘http://192.168.1.1:9200/_snapshot/mybackup’ -H ‘Content-Type: application/json’ -d ‘
“type”: “fs”,
“settings”:
“location”: “/data/es/backup”,
“compress”: true
’
查看仓库:
curl -XGET ‘http://192.168.1.1:9200/_snapshot/mybackup’
4) 快照某个索引
比如将索引api_usage_201705备份
curl -XPUT ‘http://192.168.1.1:9200/_snapshot/mybackup/x_201705’ -H ‘Content-Type: application/json’ -d ‘
“indices”: “x_201705”
’
Es的索引为增量索引,下次再快照这个索引的时候,不会快照全部
查看状态:
curl -XGET http://192.168.1.1:9200/_snapshot/mybackup/x_201705/_status
5) 恢复
先确保关闭,再使用restore命令还原
curl -XPOST ‘http://192.168.1.1:9200/ x_201705 /_close’
curl -XPOST ‘http://192.168.1.1:9200/_snapshot/ mybackup/x_201705/_restore’
注:
目前可以使用的仓库为mybackup,可以参考上面的方法将某些有需要的索引快照。
es的查询当然是es的重中之重,不过这里不做介绍了,也不费心思去挖掘了:)
以上是关于ElasticSearch的主要内容,如果未能解决你的问题,请参考以下文章
EasySwoole+ElasticSearch打造高性能小视频服务系统