Elasticsearch 是一个高度可伸缩的开源全文搜索和分析引擎。它允许您快速、近乎实时地存储、搜索和分析大量数据。它通常用作底层引擎/技术,为具有复杂搜索特性和需求的应用程序提供支持。
我目前的理解是,在大数据量的情况下,关系型数据库的查询搜索效率会达不到系统的要求,无法做到有效的实时查询和数据分析,所以,就需要引入 Elasticsearch 来分担这份工作。
把需要进行分析的数据存储到 Elasticsearch 中,并通过它的各种查询和聚合更有效率的响应和分析数据。
如果是安装 Elasticsearch 最新版本,看 Installing Elasticsearch 这里就很容易安装了,或者是常用的 brew 安装 。
但是我们目前需要安装 6.4.3 可能就稍微麻烦一点了,brew 中没有这个版本了。
0. 安装 Java JDK
Elasticsearch 依赖于 jdk,所以必须先安装好相应的 jdk 版本,我们下一步才会比较顺利安装 Elasticsearch 相关的。见说明:Set up Elasticsearch。
因为接下来是安装 Elasticsearch 6.4.3,所以需要先安装 6.4.3 依赖的 jdk 8,各版本依赖可查看 Elasticsearch and JVM。
没有安装相应 jdk 版本,执行 sudo dpkg -i elasticsearch-6.4.3.deb
可能会报错 (Reading database ... 74361 files and directories currently installed.) Preparing to unpack elasticsearch-6.4.3.deb ... dpkg: error processing archive elasticsearch-6.4.3.deb (--install): subprocess new pre-installation script returned error exit status 1 Errors were encountered while processing: elasticsearch-6.4.3.deb
参考:How To Manually Install Oracle Java on a Debian or Ubuntu VPS 这篇文章基本上可以在 ubuntu 上安装好 jdk 了。
遇到的不太顺畅的地方,就是 Oracle 下载 jdk 需要先登录并同意后才可以下载,直接通过 wget 下载链接的方式不能正确下载到,所以需要注意一下,文章中有一段提示可解决。
Oracle does not allow downloads without accepting their license, therefore we needed to modify the header of our request. Alternatively, you can just download the compressed file using your browser and manually upload it using a SFTP/FTP client.
我的解决方式是先在本地浏览器登录 Oracle 官网,去 下载页面 选择并下载要安装的 jdk 版本,过程中可以在浏览器下载列表中找到带有登录参数的下载链接,再通过 wget 下载到远端机器上,如下图,
image.pngwget https://download.oracle.com/otn/java/jdk/8u202-b08/1961070e4c9b4e26a04e7f5a083f551e/jdk-8u202-linux-x64.tar.gz?AuthParam=1593172842_b1fa1511e98ac208d05c3ea2b78d4d9f
接下来跟着参考文章继续走(如果不是 root 用户,需要使用 sudo 执行命令),解压 jdk 并安装即可。
1. 安装 Elasticsearch
在这一页可以找到各个版本的安装文档:https://www.elastic.co/guide/en/elastic-stack-get-started/index.html
下面是我的安装方式,
curl -L -O https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.4.3.deb
sudo dpkg -i elasticsearch-6.4.3.deb
sudo /etc/init.d/elasticsearch start
执行 curl http://127.0.0.1:9200
,查看是否运行成功。
$ curl http://127.0.0.1:9200
{
"name" : "xxxx",
"cluster_name" : "elasticsearch",
"cluster_uuid" : "xxxxx",
"version" : {
"number" : "6.4.3",
"build_flavor" : "default",
"build_type" : "deb",
"build_hash" : "fe40335",
"build_date" : "2018-10-30T23:17:19.084789Z",
"build_snapshot" : false,
"lucene_version" : "7.4.0",
"minimum_wire_compatibility_version" : "5.6.0",
"minimum_index_compatibility_version" : "5.0.0"
},
"tagline" : "You Know, for Search"
}
2. 安装 kibana
kibana 是用来可视化 Elasticsearch 的,通过它可以查看存储的 index 和相关数据。相当于数据库客户端。版本要和 Elasticsearch 一致。
参考:Kibana 6.4.3
wget [https://artifacts.elastic.co/downloads/kibana/kibana-6.4.3-amd64.deb](https://artifacts.elastic.co/downloads/kibana/kibana-6.4.3-amd64.deb)
sudo dpkg -i kibana-6.4.3-amd64.deb
sudo -i service kibana start
执行 curl http://127.0.0.1:5601
,查看是否成功。
$ curl http://127.0.0.1:5601
<script>var hashRoute = '/app/kibana';
var defaultRoute = '/app/kibana';
var hash = window.location.hash;
if (hash.length) {
window.location = hashRoute + hash;
} else {
window.location = defaultRoute;
}</script>
3. 创建 Elasticsearch template
索引模板: 就是把已经创建好的某个索引的参数设置(settings)和索引映射(mapping)保存下来作为模板, 在创建新索引时, 指定要使用的模板名, 就可以直接重用已经定义好的模板中的设置和映射.
索引模板,简而言之,是一种复用机制,就像一些项目的开发框架如 Laravel 一样,省去了大量的重复,体力劳动。当新建一个 Elasticsearch 索引时,自动匹配模板,完成索引的基础部分搭建。
我们用了 gem 'elasticsearch-ruby'
gem 'act-fluent-logger-rails'
,大致是
r = c.indices.put_template name: 'rails.order', body: {
index_patterns: ["rails.order-*"],
settings: {
index: {
number_of_shards: "1",
auto_expand_replicas: "0-1"
}
},
mappings: {
fluentd: {
dynamic: false,
properties: {
"@timestamp" => { type: "date" },
order_id: { type: "keyword" },
name: {
type: "keyword",
fields: { text: { type: "text" } }
},
user_id: { type: "keyword" },
user_nickname: { type: "keyword" },
user_gender: { type: "keyword" },
user_created_at: { type: "date" }
amount: { type: "scaled_float", scaling_factor: 100 }
}
}
}
}
4. 创建 Elasticsearch index
这个就相当于导入数据到 Elasticsearch 中了。
在 Elasticsearch 中每一条数据就是一条 index。
log = Fluent::Logger::FluentLogger.new
Order.all.find_each(batch_size: 1000) do |o|
log.post("rails.order", o.to_es_doc)
end
如何卸载
参考How to Uninstall Elasticsearch on Linux 和 How to uninstall Elasticsearch and Kibana
执行:
sudo apt-get --purge autoremove elasticsearch
sudo rm -rf /opt/elasticsearch # (之前的安装目录)
sudo apt-get remove --purge kibana
总结
以上都完成后就准备好 Elasticsearch 数据方面的准备了。Elasticsearch 查询部分就要接下来看文档怎么写了。
因为用了 gem elasticsearch-ruby 的关系,除了需要看一遍 es 的查询语法,又需要把 es 的语法再转换为该 gem 的语法,也遇到些阻碍,后面把 elasticsearch-ruby 源码下载下来,再配合 google、es 官方文档,总算写出来了 es 的查询,最后查到了数据并显示在页面上。
网友评论