概述 #
介绍 #
INFINI Easysearch 是一款分布式 AI 搜索型数据库,支持结构化和非结构化的数据检索、全文检索、向量检索、空间地理位置信息检索、组合查询、多语种支持、语义分析和聚合分析等多种功能。
Easysearch 采用商用友好协议,企业可自由进行内部部署、二次开发和商业化服务,无需担忧协议合规风险。基于 Lucene 构建,Easysearch 紧跟 Lucene 最新版本持续迭代更新,兼容 ES API 与生态工具,为企业提供轻量、安全、自主可控的搜索平台。
核心特性 #
| 特性 | 说明 |
|---|---|
| 轻量易用 | 安装包约 50MB,开箱即用 |
| 内置安全 | 默认启用 TLS 加密与身份认证,支持 LDAP |
| 全文检索 | 基于 Lucene,支持 BM25 评分、IK 中文分词、同义词 |
| 向量检索 | kNN 近似最近邻搜索,支持 AI embedding |
| 聚合分析 | 桶聚合、指标聚合、管道聚合 |
| SQL 支持 | 使用 SQL 语法查询索引,支持 JDBC |
| ES 兼容 | 兼容 ES API、客户端与生态工具 |
| 信创适配 | 支持龙芯、鲲鹏、飞腾、麒麟、统信等国产平台 |
架构总览 #
┌─────────────────────────────────┐
│ 客户端 / 应用程序 │
│ (REST API, Java, Python, SQL) │
└──────────────┬──────────────────┘
│ HTTPS (9200)
┌──────────────▼──────────────────┐
│ INFINI Gateway (可选) │
│ 负载均衡 · 限流 · 查询审计 │
└──────────────┬──────────────────┘
│
┌────────────────────────┼────────────────────────┐
│ │ │
┌───────▼───────┐ ┌────────▼────────┐ ┌────────▼────────┐
│ Node 1 │ │ Node 2 │ │ Node 3 │
│ master+data │◄────►│ master+data │◄───►│ master+data │
│ │ 9300 │ │9300 │ │
│ ┌───┐ ┌───┐ │ │ ┌───┐ ┌───┐ │ │ ┌───┐ ┌───┐ │
│ │S0 │ │S1R│ │ │ │S1 │ │S2R│ │ │ │S2 │ │S0R│ │
│ └───┘ └───┘ │ │ └───┘ └───┘ │ │ └───┘ └───┘ │
└───────────────┘ └────────────────┘ └────────────────┘
S = 主分片 SR = 副本分片
- 节点 (Node):一个 Easysearch 实例,承载数据和处理请求
- 集群 (Cluster):一组协同工作的节点
- 索引 (Index):文档的逻辑集合,类比关系数据库的表
- 分片 (Shard):索引的物理分区,分布在不同节点上
- 副本 (Replica):分片的冗余拷贝,提供高可用和读扩展
商用友好协议 #
Easysearch 是商业软件,采用商用友好协议,专为企业商业化需求设计:
| 权利 | 说明 |
|---|---|
| 内部使用 | 可在任何规模的生产环境中自由部署和使用 |
| 二次开发 | 允许深度定制和功能扩展,衍生成果完全归企业所有 |
| 商业化服务 | 可基于 Easysearch 构建 SaaS、托管服务或商业产品,无需公开源代码 |
| 部署自由 | 支持私有云、公有云、混合云及任何物理环境 |
| 无传染性 | 不会因为提供服务而被迫公开技术栈实现 |
基本概念 #
集群和节点 #
Easysearch 采用分布式设计,意味着您可以与集群中的任何节点进行交互。每个集群都是一个或多个节点的集合。
- 小集群(3 节点)适合中小数据量
- 大集群可以扩展到数百个节点,按角色分离职责
- 有关节点角色的设置,请参阅 搭建集群
索引与文档 #
Easysearch 将数据组织成索引。每个索引都是 JSON 文档的集合:
{
"title": "INFINI Labs",
"release_date": "2021-12-03"
}
将文档添加到索引时,Easysearch 会添加元数据(_id、_index、_version 等)。
索引还包含:
- 映射 (Mapping):定义字段类型(text、keyword、integer、date 等)
- 设置 (Settings):分片数量、副本数、刷新间隔等
主分片和副本分片 #
- 主分片:承载数据的原始分区,索引创建后数量不可更改
- 副本分片:主分片的冗余拷贝,提供故障转移和读取扩展
- 经验法则:单个分片大小保持在 10~50 GB
REST API #
使用 HTTP 请求与 Easysearch 交互:
# 写入文档
curl -ku admin:password -X PUT "https://localhost:9200/my-index/_doc/1" \
-H 'Content-Type: application/json' \
-d '{"title": "Hello", "content": "Easysearch 入门"}'
# 搜索
curl -ku admin:password "https://localhost:9200/my-index/_search?q=Hello"
# 删除
curl -ku admin:password -X DELETE "https://localhost:9200/my-index/_doc/1"