rock365/windsearch

WindSearch是一个基于中文分词,由纯PHP开发全文检索引擎,可快速搭建PHP站点的站内搜索,他没有任何繁琐的安装配置、不需要维护调优、不占用服务器内存、可与PHP项目完美融合在一起。

v2.0.0 2025-02-21 06:47 UTC

This package is auto-updated.

Last update: 2025-06-26 01:11:32 UTC


README

让PHP站内搜索变得像呼吸一样简单(新功能开发中...)

AGPL License GitHub Stars

👏 功能新增

2.0版本新增:

🚀 一行代码开启极速搜索体验!

使用composer安装:

composer require rock365/windsearch

或 使用Git安装:

git clone git@github.com:rock365/windsearch.git

或 直接在github下载。

📖 在线文档

https://rock365.github.io/ 偶尔不稳定,多刷新几次就行

🚀 PHP开发者苦ES久矣!

还在为Elasticsearch的复杂配置头疼?WindSearch给您:

  • 零依赖:无需Java环境,告别JVM调优噩梦
  • 中文友好:内置中文分词程序,为中文搜索而生
  • 闪电速度:百万数据毫秒级响应
  • 中文优化:内置20万+专业词库,分词精度超98%
  • 内存克星:小内存也能搜索大数据,内存占用为零

🚀 众多优势

  • ✅ 比数据库LIKE快300倍,比ES轻量90%
  • ✅ 天然适配Laravel/ThinkPHP等主流框架
  • ✅ 支持「全文搜索」「同义词扩展」「字段权重优化」「自定义分词插件」等
  • ✅ 支持增量索引合并
  • ✅ 支持实时索引、实时搜索
  • ✅ 支持搜索过滤
  • ✅ 支持int递增主键、uuid主键

🚀 快速使用(配合文档使用更佳)

环境要求:

  • UTF-8编码
  • PHP ≥7.3
  • mbstring Extension
  • PDO Extension
  • SQLite Extension

引入入口文件:

WindSearch安装完成后,引入入口文件,注意具体文件路径

require_once 'yourdirname/vendor/autoload.php';

建索引库:

复制修改粘贴即可,跟mysql建表差不多

$mapping = [
  	//设置索引库的名称,比如对应的表名
    'name' => 'test', 
    // 字段配置
    'field' => [ 
        [
            'name' => 'id',// 主键名称 主键必须设置
            'type' => 'primarykey', //数据类型为主键 必须设置
            'primarykey_type' => 'Int_Incremental', // int递增
        ],
        [
            'name' => 'title',
            'index' => true, // 是否索引此字段
            'type' => 'text',
            'analyzer' => 'segment', // 配置分词方式
        ],
        [
            'name' => 'tags',
            'index' => true,
            'type' => 'keyword', 
        ]
        [
            'name' => 'score',
            'type' => 'numeric', 
        ],
        [
            'name' => 'time',
            'type' => 'date'
        ],

        [
            'name' => 'descr',
            'type' => 'text',
        ],

    ]

];

// 实例化对象
$Wind = new \WindSearch\Index\Wind('test'); //test 当前索引库的名称
//检查是否存在此索引库
$is_index = $Wind->checkIndex();
// 如果存在此索引库
if ($is_index) {
    //删除索引库
    $Wind->delIndex();
}
//创建索引库
$Wind->createIndex($mapping);

导入数据:

//实例化引擎
$Wind = new \WindSearch\Index\Wind('test');
// 初始化
$Wind->buildIndexInit();
// 开启分词,导入数据时,加true可加快速度
$Wind->loadAnalyzer(true);

// 数据量小(内容少于一万条),则可以一次性全部导入
// selectAll...
// $result:一次性查询的所有内容
foreach ($result as $v) {
    $Wind->indexer($v);
}
// 批量写入文件保存
$Wind->batchWrite();

构建索引:

// 数据导入结束后,接着可立即调用此方法构建索引
// 注意,数据量大时,此步骤会比较耗时
$Wind->buildIndex();

开始搜索:

//实例化引擎
$Wind = new \WindSearch\Index\Wind('test');

//开启分词功能
$Wind->loadAnalyzer();

//开始搜索

// 搜索单个字段
$query = [
    'match' => [
        'field' => [
            'name' => 'title',
            'query' => $text,
        ],
        'list_rows' => $listRows, //每页多少条数据
        'page' => $page, //第几页

    ]

];

// 搜索接口
$res = $Wind->search($query, $page, $listRows);
// 返回的最终结果,可直接渲染到前台页面
$resArr = $res['result']['_source'];

以上流程可以快速实现一个PHP全文检索,当然,这些只是餐前小菜,WindSearch还有更深入、更丰富的搜索功能等你挖掘:

在线开发文档:https://rock365.github.io/ 偶尔访问不稳定,多刷新几次即可

👏 让PHP再次伟大!

点个star吧亲亲O(∩_∩)O~~谢谢大家!

联系方式:

微信:azg555666