Enterprise:如何使用 Ruby 客户端将数据提取到 App Search 中

Posted Elastic 中国社区官方博客

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Enterprise:如何使用 Ruby 客户端将数据提取到 App Search 中相关的知识,希望对你有一定的参考价值。

在之前的有些文章中,我已经介绍了如何导入数据到 App Search 中。你可以参考文章 “Elastic:菜鸟上手指南” 中的 “解决方案” 章节。在今天的文章中,我将介绍如何使用 Ruby client 把 Postgres 数据库中的数据导入到 App Search 中。

在今天的展示中,我们将使用 Elastic Stack 7.16.1 来进行展示。

安装

Postgres

如果你在自己的电脑上还没有安装过 Postgres 数据库,你需要根据自己的操作系统进行安装。我们使用 Postgres 创建一个简单的 testdb 数据库,并且它里面含有如下的几个文档:

Elasticsearch

我们首先按照文章 “如何在 Linux,MacOS 及 Windows 上进行安装 Elasticsearch” 来安装 Elasticsearch。

Kibana

我们按照文章 “Kibana:如何在 Linux,MacOS 及 Windows上安装 Elastic 栈中的 Kibana” 来安装 Kibana。在本次的练习中,Kibana 的安装可以是不必要的。

配置安全

我们按照文章 “Elasticsearch:设置 Elastic 账户安全” 为我们的集群配置安全。等我们配置完毕后,我们重新进入 Kibana 时需要使用用户名及密码来进行登录。为方便起见,我们为用户 elastic 设置的密码为 password。

安装 App Search

我们到地址 Download Elastic Enterprise Search | Elastic 下载最新的 App Search (当前的最新版本为7.16)。如果你想下载之前的版本,请点击链接 Past Releases of Elastic Stack Software | Elastic。我们需要 enterprise-search 的版本和 Elasticsearch 及 Kibana 的版本一致。

在上面的下载链接中,它很清楚地描述了如何安装 Enterprise Search。简单地说,

修改 Elasticsearch 的配置

我们需要添加如下的设置到 Elasticsearch 的配置中:

xpack.security.enabled: true
xpack.security.authc.api_key.enabled: true

上面的第一个设置在我们配置安全的时候已经设置过了,所以我们只需要配置第二个设置即可。配置完毕后,我们重新启动 Elasicsearch。

安装 Enterprise Search

按照 Support Matrix | Elastic 链接上的要求,我们需要安装合适颁布的 JVM。在实际的使用中,如果 JVM 不是要求的版本可能会出现这样或那样的错误。我们接着下载和 Elasticsearch 版本一致的 Enterprise Search,并使用如下的命令来对它进行解压缩:

tar xzf enterprise-search-7.16.1.tar.gz

我们进入到解压缩后的目录中,并对它的配资文件 config/enterprise-search.yml 进行修改:

config/enterprise-search.yml

ent_search.auth.source: standard
elasticsearch.username: elastic
elasticsearch.password: ELASTIC_USER_PASSWORD
allow_es_settings_modification: true

我们添加如上的配置到 enterprise-search.yml 文件中去。记得修改其中的 ELASTIC_USER_PASSWORD 为自己的 Elasticsearch 安全设置中配置的密码。

同时,我们也必须天如下的配置:

secret_management.encryption_keys: [ENCRYPTION_KEY_1, ENCRYPTION_KEY_2, ...]

我们必须至少设置一个 encryption key 到上面的设置中。但是我们不知道该设置什么样的值,那该怎么办呢?

我们先不配置该设置,我们直接在命令行中打入如下的命令来启动 enterprise-search:

ENT_SEARCH_DEFAULT_PASSWORD=passwordexample bin/enterprise-search

在这里,我们可以取一个我们喜欢的密码。在上面,为了方便,我取 passwordexample 为密码。当 enterprise-search 开启启动的时候,我们可以看到如下的输出:

在上面的输出中,它显示了一个推荐的设置。我们把上面的设置拷贝下来,并添加到 config/enterprise-search.yml 的配置文件中。我们再次重新启动 enterprise-search:

ENT_SEARCH_DEFAULT_PASSWORD=passwordexample bin/enterprise-search

在上面命令启动的过程中,我们可以看到如下的输出:

为了能够保存 session,我们可以把上面的 secret_session_key 添加到 config/enterprise-search.yml 中去。

在启动的过程中,我们可以看到 enterprise_search 的用户名及密码:

 我们需要记下这个用户名及密码。

添加完毕后,我们重新启动:

ENT_SEARCH_DEFAULT_PASSWORD=passwordexample bin/enterprise-search

我们回到 Kibana 的界面:

点击上面的 App Search:

​ 

通过上面的配置,我们可以使得 App Search 能够在 Kibana 中可见。我们修改 config/kibana.yml 文件。添加如下的设置:

enterpriseSearch.host: 'http://localhost:3002'

当我们再次打开 Kibana 中的  App Search 后,我们会发现:

​ 

也就是说我们可以在 Kibana 中针对 App Search 进行操作,而不用打开如下的网址 

第一次启动它需要较长的时间来进行初始化的动作。我们需要耐心等待一段时间,直至它完全启动起来。我们打开浏览器的地址 http://localhost:3002

我们打入之前设置的密码,并点击 Log In:

这样我们的 Enterprise Search 安装已经完成了。

修改 Kibana 配置

如果我们希望在 Kibana 中能访问 enterprise search,那么我们需要修改 Kibana 的配置文件。添加如下的配置到 kibana.yml 的最后一行:

 config/kibana.yml

enterpriseSearch.host: http://localhost:3002

你需要根据自己的 enterprise search 的 IP 地址来进行设置。修改完这个配置后,我们需要重新启动 Kibana。这样我们就可以在 Kibana 中查看到 App Search:

也就是说,我们可以直接从 Kibana 中来创建 engine,而不用访问 http://localhost:3002

在接下来的练习中,我们还是描述从 http://localhost:3002 网页中进行的步骤。

创建 engine

我们为 App Search 应用创建一个 engine。我们点击如上所示的 Launch App Search

 在上面,我们创建一个叫做 postgres 的 engine:

 我们在上面的位置可以创建 Private API Key。

  

创建 Ruby 客户端应用导入数据

我们先按照需要的包:


sudo gem install elastic-enterprise-search
sudo gem install pg

我们先创建一个如下的 postgres.rb 文件:

postgres.rb

require 'elastic-enterprise-search'

host = 'http://localhost:3002'
api_key = 'private-x5xrnsb4ajecqau8n69xsvux'
ENGINE_NAME = 'postgres'

ent_client = Elastic::EnterpriseSearch::AppSearch::Client.new(host: host)
app_search = ent_client.app_search(http_auth: api_key)

require 'pg'

conn = PG.connect(:host => 'localhost', :port => 5432, :dbname => 'testdb', :user => 'liuxg', :password => '123')
result = conn.exec('SELECT * from company')

result.each_slice(100) do |documents|
    app_search.index_documents(
        ENGINE_NAME,
        documents: documents.to_json
    )
end

在上面的 host 里,它定义了 App Search 服务器的地址。api_key 是从上一个步骤里拷贝的 private key。 

我们使用如下的命令来进行运行:

ruby postgres.rb

一旦运行完毕后,我们可以在 App Search 里进行查看:

从上面,我们可以看出来有 5 个文档被摄入。我们也可以切换到 Documents 界面查看数据:

针对实际的使用,这个可能还不是最后的,因为我们可能还会不停地写入 Postgres 数据库。我们需要使用软件的方法在写入或删除 Postgres 文档的同时,也更新在 App Search 里的文档。

一旦数据被摄入,我们可以参考文章:

里的方法来对搜索进行定制。这里就不再累述了。

如果你对如何使用 Python 及 php 来摄入数据,那么请参考文章:

以上是关于Enterprise:如何使用 Ruby 客户端将数据提取到 App Search 中的主要内容,如果未能解决你的问题,请参考以下文章

Enterprise:如何使用 PHP 客户端将数据提取到 App Search 中

Enterprise:如何使用 PHP 客户端将数据提取到 App Search 中

ruby 使用Gist for Github Enterprise

Enterprise:如何使用 Python 客户端将数据提取到 App Search 中

Enterprise:如何使用 Python 客户端将数据提取到 App Search 中

Enterprise:使用 Elastic Stack 8.2 中的 Elasticsearch API 来定位 App Search 中的文档