LeanDB Elasticsearch 使用指南
LeanDB Elasticsearch 是云引擎提供的托管数据库,开发者可以在云引擎中使用 Elasticsearch 客户端类库或 HTTP API 连接,访问完整的 Elasticsearch 功能,更多其他托管数据库请查看 云引擎服务总览。
Elasticsearch 的主要特性:
- 高可用:多节点集群方案,可以容忍单节点故障。
- 在线扩容:在线调整容量和规格,数据平滑迁移。
- 多实例:满足更大容量或更高性能的需求。
- 中文分词:内置中文分词插件并支持自定义词库。
创建和管理实例
开发者可以在 开发者中心 > 你的游戏 > 游戏服务 > 云服务 > 云引擎 > 数据库 > Elasticsearch 页面创建和管理 LeanDB Elasticsearch 实例。
创建实例
点击 创建实例 可在控制台中看到一些配置项:
- 实例规格 目前提供
512M
、1GB
、2GB
、4GB
、8GB
几种,代表不同的运算能力,是计费的基础。
每种规格有固定的存储空间限制,如需要更多存储空间需要升级到更高的规格。
在调整好规格后,可以在控制台上看到当前规格的价格。
点击展开 LeanDB 计费详情
LeanDB 按天进行扣费,使用时间不足一天也按一天计费,每天扣除前一天的费用。LeanDB 基于开发者选择的实例规格进行计费,与实际用量无关(即使创建后未使用也会计费)。各规格的价格可以在创建 LeanDB 时或价格页面查看,扣费记录可在开发者中心的账单中查看。
Elasticsearch 版本
目前 LeanDB 仅提供 Elasticsearch 7.9 版本。
在线扩容
目前 LeanDB Elasticsearch 不提供自助扩容的能力,如需扩容请提交工单联系我们的技术支持。
管理共享
可以使用控制台上的「管理共享」功能将 LeanDB 实例共享给其他应用,被共享的应用的 LeanDB 页面可能看到这个实例,相关的环境变量也会出现在其他应用的云引擎中。
在云引擎中使用
LeanDB 所在的应用的云引擎在部署时,会被注入几个包含 Elasticsearch 连接信息的环境变量,包括:
ELASTICSEARCH_URL_<NAME>
其中 <NAME>
是你在创建 LeanDB 时为它指定的名字,如果你的 LeanDB 名为 MYES
的话,就会有名为 ELASTICSEARCH_URL_MYES
的环境变量。
该环境变量的格式是 http://username:password@host:port
,其中包含了所有连接 Elasticsearch 所需的信息,包括认证信息。
- Node.js
在 Node.js 中你可以这样连接到 Elasticsearch:
const { Client } = require("@elastic/elasticsearch");
const client = new Client({
node: process.env.ELASTICSEARCH_URL_MYES,
});
// promise API
const result = await client.search({
index: "my-index",
body: {
query: {
match: { hello: "world" },
},
},
});
// callback API
client.search(
{
index: "my-index",
body: {
query: {
match: { hello: "world" },
},
},
},
(err, result) => {
if (err) console.log(err);
}
);
- 你需要运行
npm install @elastic/elasticsearch
来安装上面代码中用到的依赖 - 更多的用法请参考 Elasticsearch Node.js client
中文分词
除了 elasticsearch 自带的分词器,我们还提供了 Elasticsearch ik plugin 以支持中文分词。 我们可以通过以下途径指定使用 IK 插件进行中文分词:
- 在搜索时,指定分词器
- 在创建索引时,为特定
field
指定搜索分词器 - 在创建索引时,指定索引的默认分词器
- 在创建索引时,为特定
field
指定分词器
它们的优先级依次降低,当都未指定时,会使用默认的标准分词器(standard analyzer)。具体细节及参数见 specify an analyzer。
自定义词库
除此之外,自定义词库也是支持的。用户可以在控制台上传自定义词库。 词库文件要求为 UTF-8 编码,每个词单独一行,文件大小不能超过 10MB,例如:
面向对象编程
函数式编程
高阶函数
响应式设计
将其保存为文本文件,例如 dict.txt
,上传即可。上传之后,分词将于 2 分钟后生效。开发者可以通过 analyze API 来测试。需要注意使用 analyze API 时要指定 index,使用 curl -X POST "localhost:9200/my-index/_analyze?pretty"
的形式。
管理数据
除了在云引擎中通过编程的方式访问 LeanDB,我们还提供了用于进行管理、调试或一次性数据操作的方式。
使用命令行工具连接
使用 命令行工具 CLI 提供的 tds db shell
可以打开一个连接到云端 LeanDB 的交互式 shell,用于执行查询:
$ tds db shell mysqldb
Welcome to the MySQL monitor.
Your MySQL connection id is 3450564
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> use test
Database changed
mysql> insert into users set name = 'leancloud';
Query OK, 1 row affected (0.04 sec)
mysql> select * from users;
+------+-----------+
| id | name |
+------+-----------+
| 1 | zhenzhen |
| 2 | leancloud |
+------+-----------+
2 rows in set (0.06 sec)
使用 tds db proxy
可以将云端 LeanDB 导出到本地的一个端口,供本地的程序或图形化的数据库客户端连接:
$ tds db proxy myredis
[INFO] Now, you can connect myredis via [redis-cli -h 127.0.0.1 -a hsdt9wIAuKcTZmpg -p 5678]
保持这个终端运行(不要关闭),就可以在本地的 5678 端口访问到云端的 LeanDB 了。你可以使用本地的 GUI 客户端来浏览操作云端的 LeanDB。在使用 tds up
进行开发测试时,也可以使用这个功能连接到云端的 LeanDB,设置环境变量(来自前面 tds db proxy
的输出):
export REDIS_URL_myredis=redis://default:[email protected]:5678
tds db
命令访问云端 LeanDB 实例仅用于本地开发和测试,连接会偶尔断开(部分客户端可以自动重连),请不要用于生产环境。