1个稳定版本

3.0.1 2021年5月1日
3.0.0 2021年4月17日
2.1.2 2021年4月16日
1.1.5 2021年4月12日
0.0.3 2021年4月3日

#685HTTP服务器

Download history 1/week @ 2024-03-11 17/week @ 2024-04-01

每月51次 下载

MIT 许可证

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证书
  • 使用用户授权范围
  • 基于sonicbroker构建

使用

  1. broker上创建具有以下范围的用户 - 对于完整权限 portal:full 或细粒度权限 portal:create_bucket, portal:delete_bucket, portal:index, portal:deindex, portal:search, portal:suggest
  2. 登录到broker并获取JWT
  3. 将JWT作为Authorization: Bearer {token}附加到以下JSON API端点
  4. 创建一个存储桶

创建存储桶

POST /create_bucket
  • 已认证的端点示例(Authorization: Bearer {jwt})
{
    "collection": "coffee",
    "name": "tenant_1"
}

将返回:200500400401

  • 注意:存储桶名称必须是全局唯一的

删除存储桶

POST /delete_bucket
  • 已认证的端点示例(Authorization: Bearer {jwt})
{
    "collection": "coffee",
    "name": "tenant_1"
}

将返回:200500400401

索引

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"]
    }]
}

将返回:200500400401

  • 注意:只有用户创建的存储桶才能在索引调用中使用

  • 注意: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
}
  • limitoffset 是可选字段

将返回:200500400401

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 是可选字段

将返回:200500400401

{
    "suggestions": ["roasted"]
}

删除索引

POST /deindex
  • 已认证的端点(Authorization: Bearer {jwt})
{
    "ids": ["49e28aae-88d4-4c19-86d8-51f2c9f11039"]
}

将返回:200500400401

健康检查

GET or HEAD /
  • 公开端点

将返回:200

安装

cargo安装门户

  • origin 可以作为一个标志传递 - 默认 *
  • port 可以作为一个标志传递 - 默认 8888 - 只能用于不安全的连接
  • https 的 secure 标志可以是 true 或 false - 默认 false
  • 自动续期的 Let's Encrypt SSL 证书的 auto_cert 标志可以是 true 或 false - 需要可解析的域名 - 默认 true
  • auto_certfalse 时,key_path 标志用于设置您的自签名证书的 SSL 密钥路径 - 默认 certs/private_key.pem
  • auto_certfalse 时,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