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

原创
07/14 15:01
阅读数 15

导语



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


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


安装



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


我们到地址 https://www.elastic.co/downloads/enterprise-search 下载最新的 App Search (当前的最新版本为7.13)。如果你想下载之前的版本,请点击链接 https://www.elastic.co/downloads/past-releases#app-search。我们需要 enterprise-search 的版本和 Elasticsearch 及 Kibana 的版本一致。


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



修改 Elasticsearch 的配置



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

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


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



安装 Enterprise Search



我们接着下载和 Elasticsearch 版本一致的 Enterprise Search,并使用如下的命令来对它进行解压缩:

tar xzf enterprise-search-7.13.0.tar.gz


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

config/enterprise-search.yml

ent_search.auth.source: standardelasticsearch.username: elasticelasticsearch.password: ELASTIC_USER_PASSWORDallow_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 中去。添加完毕后,我们重新启动:

ENT_SEARCH_DEFAULT_PASSWORD=passwordexample bin/enterprise-search


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


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


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


创建 engine


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


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


我们在上面的位置可以找到 Private API Key。


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


我们首先来安装必要的 python 模块:

pip3 install elastic_enterprise_searchpip3 install psycopg2-binary


我们接下来创建如下的一个叫做 postgres.py 的文件:

postgres.py

from elastic_enterprise_search import AppSearch endpoint = 'http://localhost:3002'private_key = 'private-wununxx9aqxvttzxzn7a2nns' app_search = AppSearch(    endpoint,    http_auth=private_key) import psycopg2 conn = psycopg2.connect(host='localhost', port=5432, database="testdb", user="liuxg", password="123") cur = conn.cursor() cur.execute("""SELECT * FROM company""") while True:    records = cur.fetchmany(size=100)    if not records:        break;     items = [dict((cur.description[i][0], value) for i, value in enumerate(r)) for r in records]    app_search.index_documents("postgres", items) cur.close()conn.close()


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

python postgre.py


在 terminal 中,我们可以看到运行完全成功。我们回到 App Search 中去查看:


从上面我们可以看到有5个文档被导入。它们就是我们在之前看到的在 Postgres 数据库中的5个文档:


好了到目前为止,我们成功地把 Postgres 里的数据导入到 App Search 中。在实际的使用中,我们的 Postgres 数据库可能需要添加或者修改数据,那么在这种情况下,我们建议在添加或删除 Postgres 数据库的同时也通过 API 的方法来对相应的数据进行更新或者删除。这个就留给你们做了。


正文完



 作者:刘晓国

本文编辑:喝咖啡的猫



嗨,互动起来吧!

喜欢这篇文章么?

欢迎留下你想说的,留言 100% 精选哦!

Elastic 社区公众号长期征稿,如果您有 Elastic  技术的相关文章,也欢迎投稿至本公众号,一起进步! 投稿请添加微信:medcl123



招聘信息

Job board


社区招聘栏目是一个新的尝试,帮助社区的小伙伴找到心仪的职位,也帮助企业找到所需的人才,为伯乐和千里马牵线搭桥。有招聘需求的企业和正在求职的社区小伙伴,可以联系微信 medcl123 提交招聘需求和发布个人简历信息。


Elastic中文社区公众号 (elastic-cn)

为您汇集 Elastic 社区的最新动态、精选干货文章、精华讨论、文档资料、翻译与版本发布等。

喜欢本篇内容就请给我们点个[在看]吧




本文分享自微信公众号 - Elastic中文社区(elastic-cn)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

展开阅读全文
打赏
0
0 收藏
分享
加载中
更多评论
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部