啊啊啊啊PHP还有没有更简单的全文检索引擎?

讨厌任何繁琐的配置!配置这个、运行那个…有这时间打打游戏、约妹子逛街不好吗?
别占用我的服务器资源!好家伙,本来服务器配置就一般,你一上来刚运行,直接占用一半内存,你还能不能行了?
为什么还要安装?开箱即用最好了!我的注意力要放在重要的业务上!

WindSearch一脚踢开以上缺点:

环境要求:

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

所有命令行之类的配置,统统离我远一点

将WindSearch所有代码,下载到本地php项目中你喜欢的文件夹,这是一个纯PHP的全文检索引擎
github地址:https://github.com/rock365/windsearch

再将入口文件引入到项目中,注意具体文件路径

require_once 'yourdirname/windsearch/vendor/autoload.php';

至此,安装已经全部完成,再无其它任何配置,快不快?

现在就可以立即使用了!

根据MySQL表的结构,建个索引库吧,复制修改粘贴即可。
<索引库>等同于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->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还有更深入、更丰富的搜索功能等你挖掘:
github地址:https://github.com/rock365/windsearch
在线开发文档:https://rock365.github.io/ 偶尔访问不稳定,多刷新几次即可

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值