1个稳定版本
3.0.1 | 2021年5月1日 |
---|---|
3.0.0 |
|
2.1.2 |
|
1.1.5 |
|
0.0.3 |
|
#685 在 HTTP服务器 中
每月51次 下载
34KB
571 行
Portal - 全文搜索Web服务
目的
此服务的目的是为任何JSON客户端提供全文搜索Web服务,包括React等JavaScript前端。
Portal是ElasticSearch、MeiliSearch、AWS CloudSearch、AWS ElasticSearch Service和Algolia的竞争对手。
Portal通过JWT验证、索引、删除索引、搜索和单词建议构建得简单且非常快速。
默认情况下,索引是批量索引。
使用此服务,您需要一个正在运行的sonic服务器和一个broker服务器。
功能
- 性能出色,几乎不占用CPU和内存
- 支持87种自然语言的全文搜索和单词建议
- 代码行数少于1000行
- 支持CORS
- 支持JWT认证
- 支持JWT缓存,带有过期检查,以最小化验证API调用
- 多租户
- 支持SSL - 完整端到端加密
- JSON API
- 通过Let's Encrypt自动配置和续订SSL证书,或使用您自己的SSL证书
- 使用用户授权范围
- 基于sonic和broker构建
使用
- 在broker上创建具有以下范围的用户 - 对于完整权限
portal:full
或细粒度权限portal:create_bucket, portal:delete_bucket, portal:index, portal:deindex, portal:search, portal:suggest
- 登录到broker并获取JWT
- 将JWT作为Authorization: Bearer {token}附加到以下JSON API端点
- 创建一个存储桶
创建存储桶
POST /create_bucket
- 已认证的端点示例(Authorization: Bearer {jwt})
{
"collection": "coffee",
"name": "tenant_1"
}
将返回:200
或 500
或 400
或 401
- 注意:存储桶名称必须是全局唯一的
删除存储桶
POST /delete_bucket
- 已认证的端点示例(Authorization: Bearer {jwt})
{
"collection": "coffee",
"name": "tenant_1"
}
将返回:200
或 500
或 400
或 401
索引
POST /index
- 已认证的端点示例(Authorization: Bearer {jwt})
{
"items": [{
"collection": "coffee",
"bucket": "tenant_1",
"id": "49e28aae-88d4-4c19-86d8-51f2c9f11039",
"data": {
"name": "roasted",
"image": "https://img.com/bucket/123/123.jpg"
},
"locale": "eng",
"indexes": ["name"]
}]
}
将返回:200
或 500
或 400
或 401
-
注意:只有用户创建的存储桶才能在索引调用中使用
-
注意:
locale
是 ISO 639-3 区域代码的可选字段 - 如果未定义,区域将自动检测 - ISO 639-3 区域代码 -
支持的区域
- afr => 阿拉伯语
- aka => 阿坎语
- amh => 阿姆哈拉语
- ara => 阿拉伯语
- azj => 阿塞拜疆语(北部)
- bel => 白俄罗斯语
- ben => 孟加拉语
- bho => 博杰普里语
- bul => 保加利亚语
- cat => 加泰罗尼亚语,瓦伦西亚语
- ceb => 菲律宾语
- ces => 捷克语
- cmn => 普通话
- dan => 丹麦语
- deu => 德语
- ell => 希腊语(现代)
- eng => 英语
- epo => 世界语
- est => 爱沙尼亚语
- fin => 芬兰语
- fra => 法语
- guj => 古吉拉特语
- hat => 海地语,海地克里奥尔语
- hau => 豪萨语
- heb => 希伯来语
- hin => 印地语
- hrv => 克罗地亚语
- hun => 匈牙利语
- ibo => 伊博语
- ilo => 伊洛科语
- ind => 印度尼西亚语
- ita => 意大利语
- jav => 爪哇语
- jpn => 日语
- kan => 卡纳达语
- kat => 格鲁吉亚语
- khm => 高棉语,中高棉语
- kin => 奇尔瓦语
- kor => 韩语
- kur => 库尔德语
- lat => 拉丁语
- lav => 拉脱维亚语
- lit => 立陶宛语
- mai => 迈蒂利语
- mal => 马拉雅拉姆语
- mar => 马拉地语
- mkd => 马其顿语
- mlg => 马达加斯加语
- mya => 缅甸语
- nep => 尼泊尔语(宏观语言)
- nld => 荷兰语,弗拉芒语
- nno => 挪威语尼诺斯克语
- nob => 挪威语博克马尔语
- nya => 雷瓦语,奇切瓦语,尼亚贾
- ori => 奥里亚语(宏观语言)
- orm => 祖鲁语
- pan => 旁遮普语
- pes => 伊朗波斯语
- pol => 波兰语
- por => 葡萄牙语
- ron => 摩尔达维亚语,摩尔多瓦语,罗马尼亚语
- run => 伦迪语
- rus => 俄语
- sin =>僧加罗语,僧伽罗语
- skr => 萨拉伊基语,塞拉伊基语
- slk => 斯洛伐克语
- slv => 斯洛文尼亚语
- sna => 桑给巴尔语
- som => 索马里语
- spa => 卡斯蒂利亚语,西班牙语
- srp => 塞尔维亚语
- swe => 瑞典语
- tam => 泰米尔语
- tel => 泰卢固语
- tgl => 他加禄语
- tha => 泰语
- tir => 提格里尼亚语
- tuk => 土库曼语
- tur => 土耳其语
- uig => 维吾尔语,维吾尔语
- ukr => 乌克兰语
- urd => 乌尔都语
- uzb => 乌兹别克语
- vie => 越南语
- ydd => 东部意第绪语
- yor => 约鲁巴语
- zul => zul语
搜索
POST /search
- 已认证的端点(Authorization: Bearer {jwt})
{
"collection": "coffee",
"bucket": "tenant_1",
"query": "roasted",
"limit": 10,
"offset": 10
}
limit
和offset
是可选字段
将返回:200
或 500
或 400
或 401
200 - 将返回一个对象数组
[
{
"collection": "coffee",
"bucket": "tenant_1",
"id": "49e28aae-88d4-4c19-86d8-51f2c9f11039",
"data": {
"name": "roasted",
"image": "https://img.com/bucket/123/123.jpg"
},
"locale": "eng",
"indexes": ["name"]
}
]
词建议
POST /suggest
- 已认证的端点(Authorization: Bearer {jwt})
{
"collection": "coffee",
"bucket": "tenant_1",
"query": "r",
"limit": 10
}
- 注意:limit 是可选字段
将返回:200
或 500
或 400
或 401
{
"suggestions": ["roasted"]
}
删除索引
POST /deindex
- 已认证的端点(Authorization: Bearer {jwt})
{
"ids": ["49e28aae-88d4-4c19-86d8-51f2c9f11039"]
}
将返回:200
或 500
或 400
或 401
健康检查
GET or HEAD /
- 公开端点
将返回:200
安装
cargo安装门户
origin
可以作为一个标志传递 - 默认*
port
可以作为一个标志传递 - 默认8888
- 只能用于不安全的连接- https 的
secure
标志可以是 true 或 false - 默认false
- 自动续期的 Let's Encrypt SSL 证书的
auto_cert
标志可以是 true 或 false - 需要可解析的域名 - 默认true
- 当
auto_cert
为false
时,key_path
标志用于设置您的自签名证书的 SSL 密钥路径 - 默认certs/private_key.pem
- 当
auto_cert
为false
时,cert_path
标志用于设置您的自签名证书的 SSL 证书路径 - 默认certs/chain.pem
certs
标志是 Let's Encrypt 证书的存储路径 - 默认certs
db
标志是嵌入式数据库将被保存的路径 - 默认db
domain
标志是要注册到 Let's Encrypt 的域名的域名(例如,api.broker.com)- 必须是完全可解析的sonic_server
标志是 sonic 服务器的 sonic 域名/ip/端口 - 默认localhost:1491
sonic_password
标志是 sonic 配置文件中设置的 sonic 密码 - 默认SecretPassword
broker
标志是代理服务器的代理域名/ip/端口 - 默认https://127.0.0.1:8080
- 生产示例:
./portal --secure="true" --domain="index.broker.com" --sonic_server="sonic.broker.com" --sonic_password="wj34T%$Dx" --broker="https://broker.broker.com"
服务
代码中有一个名为 portal.service
的 Ubuntu systemctl
服务示例
技术栈
灵感
依赖项
~52–70MB
~1.5M SLoC