对于中小型网站来说,站内搜索一直是个需求,但搭建 Elasticsearch、Solr 这样的专业搜索引擎又太重了。PHP-fts 是一个纯 PHP 实现的全文搜索引擎,不依赖任何外部服务,可以直接集成到 PHP 项目中,非常适合中小型站点使用。
项目地址
- GitHub:https://github.com/olivier-ls/php-fts
- 语言:PHP
- 许可证:MIT
功能亮点
- 纯 PHP 实现:不需要安装 Elasticsearch、Solr、Sphinx 等外部搜索引擎
- 轻量级:不依赖数据库,索引文件直接存储在文件系统中
- 支持中英文:支持 UTF-8 编码,可以处理中文搜索
- TF-IDF 算法:使用经典的 TF-IDF 算法进行相关性排序
- 简单 API:几行代码就能集成到现有 PHP 项目
使用场景
- 个人博客:为 WordPress 之外的自建博客添加站内搜索
- 文档站点:技术文档、API 文档的全文搜索
- 小型 CMS:自建内容管理系统的搜索功能
- 知识库:企业内部知识库的搜索
- 论坛/社区:小型论坛的帖子搜索
安装方法
通过 Composer 安装:
composer require olivier-ls/php-fts
或者直接克隆仓库:
git clone https://github.com/olivier-ls/php-fts.git
基本使用
1. 创建索引
use PhpFts\Index;
use PhpFts\Document;
// 创建索引目录
$index = new Index('/path/to/index');
// 添加文档
$doc = new Document('doc-1', '这是一篇关于PHP全文搜索的文章');
$doc->setTitle('PHP全文搜索教程');
$doc->setUrl('/blog/php-fts-tutorial');
$index->addDocument($doc);
$doc2 = new Document('doc-2', '如何在网站中集成搜索功能');
$doc2->setTitle('网站搜索集成指南');
$doc2->setUrl('/blog/search-integration');
$index->addDocument($doc2);
// 构建索引
$index->build();
2. 搜索
use PhpFts\Search;
$search = new Search('/path/to/index');
// 执行搜索
$results = $search->query('PHP 搜索');
// 输出结果
foreach ($results as $result) {
echo $result->getTitle() . '\n';
echo $result->getUrl() . '\n';
echo $result->getScore() . '\n';
echo $result->getExcerpt() . '\n';
}
3. 更新索引
// 添加新文档后重新构建
$index->addDocument($newDoc);
$index->build();
与专业搜索引擎的对比
| 特性 | PHP-fts | Elasticsearch | Algolia |
|---|---|---|---|
| 安装复杂度 | 极低 | 高 | 低(SaaS) |
| 内存占用 | 很小 | 很大(至少 1GB) | 无 |
| 外部依赖 | 无 | Java + ES | 无 |
| 搜索速度 | 适合小数据量 | 非常快 | 非常快 |
| 数据规模 | 万级文档 | 亿级 | 亿级 |
| 价格 | 免费 | 免费(自建) | 付费 |
注意事项
- 性能限制:适合中小型数据集(万级文档),数据量大时建议用 Elasticsearch
- 中文分词:内置分词可能不够精细,中文搜索建议配合分词词典
- 并发处理:纯 PHP 实现,在高并发场景下可能不如专业搜索引擎
- 索引更新:目前需要手动触发索引重建,不适合实时更新的场景
- 安全性:确保索引目录不在 Web 根目录下,防止直接访问
站长视角
PHP-fts 的定位很清晰:为那些”需要搜索功能但不想折腾 Elasticsearch”的站长提供一个轻量方案。如果你的网站内容不多(几千到几万篇),又不想额外安装和维护搜索服务,PHP-fts 是个不错的选择。
特别是自建 PHP 博客、文档站、小型论坛等场景,几行代码就能搞定站内搜索,比接入第三方搜索服务简单很多。












GitHub – TauricResearch/TradingAgents


GitHub – docusealco/docuseal

暂无评论内容