Fess 是开源企业级搜索服务器,基于 OpenSearch 构建,支持全文检索、分面搜索、RAG 和语义搜索。内置 Web/文件/数据库爬虫,支持 Confluence/Jira/Slack 等 20+ 数据源,单机 Docker 部署,Apache 2.0 开源,1.1k Stars。

🎤 引言

公司内部文档、产品手册、Confluence、Jira、Slack……全散落在各处,新人入职想找个东西得问遍整个公司。

商业搜索方案(Elastic Cloud、Google Search Appliance)贵得要死,Elasticsearch 搭搜索集群光运维就累死人。有什么更轻量的选择?

Fess 就是——开源企业级搜索服务器,1.1k Stars,基于 OpenSearch,内置爬虫把各种数据源一键抓取建索引,支持全文检索、分面搜索、RAG 语义搜索,打包成 Docker 一键跑起来,Apache 2.0 完全免费。


⭐ 核心功能

1. 全文检索 + 分面搜索

  • 基于 OpenSearch,支持分词、排序、搜索建议(suggest)
  • 分面导航(faceting):按文件类型、日期、标签过滤结果
  • 高亮匹配词、相关性排序、布尔查询

2. 多数据源爬虫

Fess 内置爬虫支持抓取以下数据源:

类型支持的数据源
Web任何公开网站(可配置爬取深度/规则)
文件系统本地文件、SMB、NFS、FTP、S3
数据库MySQL、PostgreSQL、Oracle、SQL Server
办公文档Microsoft Office、PDF、ZIP 压缩包
云存储S3、Google Drive、Box、Dropbox
协作工具Confluence、Jira、SharePoint、Office 365、Slack
开发工具Git、GitBucket、GitHub、GitLab

爬取后自动建索引,支持增量爬取和定时调度。

3. AI / RAG 和语义搜索

  • 语义搜索:基于 embedding 向量检索,不只是关键词匹配
  • RAG 支持:可以接 LangChain 等 LLM 工具链,做检索增强生成
  • 多语言分析:内置 20+ 语言的分词器和 analyzer

4. 权限和访问控制

  • 角色权限:搜索结果按用户角色过滤,普通员工搜不到内部敏感文档
  • SSO 支持:LDAP、OpenID Connect、SAML、SPNEGO、Microsoft Entra ID
  • 单点登录:接完公司 IdP 后员工直接登录,不用另起账号

5. REST API + 插件扩展

  • 标准 REST API(/api/v1/search 等),可被任何应用调用
  • 主题插件:上传 ZIP 自定义搜索 UI 外观
  • 数据源插件:社区贡献的连接器(Atlassian、Salesforce 等)
  • 脚本插件:Groovy / OGNL 自定义索引和查询逻辑

6. 浏览器管理界面

  • 搜索 UI:http://localhost:8080/
  • 管理后台:http://localhost:8080/admin/(默认账号 admin/admin)
  • 全程浏览器操作,不需要改配置文件

📥 安装与使用

Docker 一键部署(最简单)

git clone https://github.com/codelibs/docker-fess.git
cd docker-fess/compose
docker compose up -d

# 搜索界面: http://localhost:8080/
# 管理后台: http://localhost:8080/admin/

下载安装包(Java 21+)

# 下载最新版本
wget https://github.com/codelibs/fess/releases/download/fess-15.7.0/fess-15.7.0.zip
unzip fess-15.7.0.zip
cd fess-15.7.0

# 启动(需要先装好 OpenSearch)
./bin/fess

# 或用内置 OpenSearch 一起跑
docker compose -f compose/full/docker-compose.yml up -d

配置爬取任务(浏览器操作)

  1. 打开 http://localhost:8080/admin/,用 admin/admin 登录
  2. Web 爬取:「Web」→ 新建配置 → 填入目标 URL 和爬取规则
  3. 文件爬取:「File」→ 配置路径(如 /data/docs
  4. 数据库爬取:「Data Store」→ 填 JDBC 连接串和 SQL
  5. 启动调度:「Scheduler」→ 新建 job → 设置 cron 表达式(如 0 0 * * * 每小时爬一次)
  6. 等待爬取完成,在搜索框里搜关键词即可

REST API 调用示例

# 搜索
curl "http://localhost:8080/api/v1/search?q=kubernetes&format=json"

# 获取健康状态
curl "http://localhost:8080/api/v1/health"

接 RAG(LangChain)

from langchain_community.retrievers import FessSearchRetriever

retriever = FessSearchRetriever(
    fess_url="http://localhost:8080",
    engine_name="fess",
    top_k=5
)
docs = retriever.get_relevant_documents("如何配置 Kubernetes Ingress")

🎯 适用场景

  • 企业内部知识库搜索:把 Confluence、文档服务器、内部系统全部索引,新人搜资料不用到处问
  • 政务/教育网站站内搜索:替代 Google Site Search,部署在自己服务器,数据不出墙
  • 技术文档网站搜索:接 Docusaurus、MkDocs 等静态站,支持全文检索
  • RAG 知识库:接 LangChain/LlamaIndex 做私有知识库的检索层,配合 LLM 实现问答
  • 多数据源统一检索:把分散在 S3、Jira、Slack 的内容汇聚到一个搜索入口

🔍 对比/替代方案

工具Stars部署难度数据源AI/RAG许可证
Fess1.1k⭐ 简单20+Apache 2.0
Elasticsearch70k+⭐⭐⭐ 复杂需自搭需自配SSPL/Elastic
Meilisearch42k⭐⭐ 简单仅文件MIT
Typesense20k⭐⭐ 简单仅文件GPL 3
Solr1k+⭐⭐⭐ 复杂需自配需自配Apache 2.0
Algolia-⭐ 简单API 推送商业付费

Fess 的核心优势

  • 内置爬虫是最大亮点,Elasticsearch/Solr 都要自己配 Logstash/Filebeat
  • 开箱即用的管理 UI,不需要写代码配置
  • SSO/LDAP 原生支持,企业内用不需要新建账号
  • RAG 支持,接 LLM 比纯搜索方案更简单

Fess 的短板

  • Stars 相对少(1.1k),社区规模有限
  • 依赖 OpenSearch(额外组件),比 Meilisearch/Typesense 重的多
  • 移动端 UI 体验一般

⚠️ 注意事项

  1. Java 21 是硬性要求:旧版 Java 跑不起来,确认服务器上装了 JDK 21+。
  2. OpenSearch 内存占用:Fess 背后跑 OpenSearch,JVM 建议给 4GB+ 内存,生产环境不要低于 8GB。
  3. 爬虫robots.txt:默认遵守网站的 robots.txt 规则,需要抓取禁止爬取的内容要单独配置(确认有授权)。
  4. 权限模型要设计好:Fess 的角色过滤依赖字段权限,配置不当可能导致搜索结果泄露。
  5. 中文分词需要配置:默认 analyzer 对中文支持一般,建议按文档配置 ja_text 或 IK 等中文分词器。
  6. 升级要谨慎:大版本升级(如 14.x → 15.x)建议先在测试环境跑,Fess 配置项多,容易踩到 breaking change。
  7. 并发搜索性能有限:Fess 更适合中小企业(GB 级数据),超大规模(TB 级 + 高并发)建议还是用 Elasticsearch 集群。

✅ 总结

Fess 是中小企业快速搭建企业搜索的最佳选择:

  • 安装极简:Docker 一键跑,不需要写一行代码
  • 数据源全:20+ 内置连接器,覆盖大多数企业场景
  • SSO 支持:LDAP/OIDC/SAML,企业身份无缝接入
  • RAG 友好:接 LLM 做知识库问答比纯搜索更实用
  • 性能上限有限:超大规模场景不如 Elasticsearch
  • UI 美观度一般:功能导向,界面偏工程化

推荐指数:⭐⭐⭐⭐(4/5),适合想快速解决"资料散落各处找不到"痛点的中小企业和团队。

GitHub:github.com/codelibs/fess | 官网:fess.codelibs.org