PHP-fts:用 PHP 实现的全文搜索引擎,轻量站点搜索方案

对于中小型网站来说,站内搜索一直是个需求,但搭建 Elasticsearch、Solr 这样的专业搜索引擎又太重了。PHP-fts 是一个纯 PHP 实现的全文搜索引擎,不依赖任何外部服务,可以直接集成到 PHP 项目中,非常适合中小型站点使用。

项目地址

功能亮点

  • 纯 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 博客、文档站、小型论坛等场景,几行代码就能搞定站内搜索,比接入第三方搜索服务简单很多。

来源

© 版权声明
THE END
喜欢就支持一下吧
点赞8 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容