LeanDB Elasticsearch 指南
LeanDB 是 LeanCloud 推出的数据库托管方案,开发者可以在「控制台 => 云引擎 => LeanDB」中创建托管在 LeanCloud 的数据库实例。这篇文章主要介绍其中的 Elasticsearch 数据库。
开发者可以在云引擎中连接到自己的 LeanDB 实例,通过 HTTP 或者 使用 Elasticsearch 官方客户端类库,访问完整的 Elasticsearch 功能。
主要特性
- 高可用:多节点集群方案,可以容忍单节点故障。
- 在线扩容:在线调整容量和规格,数据平滑迁移。
- 多实例:满足更大容量或更高性能的需求。
- 中文分词:内置中文分词插件并支持自定义词库。
实例规格
- LeanDB Elasticsearch 提供 Elasticsearch 7.9 版本。
- LeanDB Elasticsearch 的规格分为
512
、1024
、2048
、4096
、8192
几种,代表不同的运算能力。 - 每种规格有固定的存储空间限制,如需要更多存储空间需要升级到更高的规格。
- 具体的价格可以在控制台上点击「创建 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 Elasticsearch 只支持从云引擎中访问,在本地调试时无法访问。
- 如账户欠费超过 3 天,LeanDB 及其中的数据会被彻底删除。
- LeanDB 每天扣费,不足一天按照一天扣费。