PHP WindSearch实现站内搜索功能

 更新时间:2025年02月23日 08:30:43   作者:PHP神搜侠  
WindSearch是一个基于中文分词,由纯PHP开发全文检索引擎,可快速搭建PHP站点的站内搜索,下面我们就来看看如何使用WindSearch实现站内搜索功能吧

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

github地址:github.com/rock365/windsearch

必须极速安装~

使用composer安装:

composer require rock365/windsearch

或 使用Git安装:

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

或 直接前往github: github.com/rock365/windsearch

还配置啥,立即开始用吧!

WindSearch包含即用模式、专业模式,即用模式适合简单搜索场景,专业模式支持复杂搜索。

即用模式

“即用模式”可以立即导入数据,无任何配置,支持int主键、uuid主键,适合简单的搜索场景。即用模式的各种api均有fast关键字。

“即用模式”的原理:对字符串进行ngram分词,搜索的结果是主键集合,你可以使用这些集合从MySQL等数据库查询原始数据。

引入文件:

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

require_once 'yourdirname/vendor/autoload.php';

导入数据

// 实例化对象
$Wind = new \WindSearch\Index\Wind('test'); //test 当前索引库的名称
// 清空之前的数据(如果之前使用即用模式导入过数据)
$Wind->deleteFastIndex();
// 批次导入数据
// $res 是从数据库查询的数据
foreach($res as $v){
    $text = $v['title'];
    $primarykey = $v['id'];
    // $text是需要搜索的具体内容,比如title;$primarykey是主键值,比如id的值
	$Wind->fastIndexer($text, $primarykey);
}
//每导入一批数据,就调用此方法进行保存
$Wind->fastBatchWrite();

// 所有数据全部导入完成后,接着构建索引(不一定非得紧接着调用,也可以在其它地方单独调用)
$Wind->fastBuildIndex();

开始搜索

// 开始搜索
$Wind = new \WindSearch\Index\Wind('test');
// 调用搜索方法
// $page 第几页 $listRows 每页多少条
$res = $Wind->fastSearch($text,$page,$listRows)
// $res:返回的主键(比如id)集合,你可以使用id集合从MySQL等数据库查询原始数据

每个索引库都可以使用即用模式导入数据,数据单独存放,跟专业模式的数据不冲突,由于即用模式属于某个索引库的下属模块,所以删除某个索引库时,同样会删除即用模式的索引数据,所以一个索引库名称尽量只使用一种模式。

注意,即用模式的搜索效果可能比不上专业模式,可根据情况作出取舍。

专业模式

(专业的部分配合文档使用更佳)

引入文件:

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实现站内搜索功能的详细内容,更多关于PHP WindSearch站内搜索的资料请关注脚本之家其它相关文章!

相关文章

  • php实现的支付宝网页支付功能示例【基于TP5框架】

    php实现的支付宝网页支付功能示例【基于TP5框架】

    这篇文章主要介绍了php实现的支付宝网页支付功能,结合实例形式分析了基于TP5框架框架的支付宝网页支付功能具体操作步骤与相关实现技巧,需要的朋友可以参考下
    2019-09-09
  • PHP中将ip地址转成十进制数的两种实用方法

    PHP中将ip地址转成十进制数的两种实用方法

    现在PHP中有很多时候都会用到ip地址,但是这个ip地址获取的时候都不是10进制的。那么PHP中如何将ip地址转成十进制数,下面为大家介绍下两种方法可以轻松实现
    2013-08-08
  • Laravel 5 框架入门(二)构建 Pages 的管理功能

    Laravel 5 框架入门(二)构建 Pages 的管理功能

    这篇文章主要介绍了Laravel 5 框架入门的第二篇文章,给大家讲解的是构建 Pages 的管理功能,十分的详细,有需要的小伙伴可以参考下。
    2015-04-04
  • ThinkPHP中limit()使用方法详解

    ThinkPHP中limit()使用方法详解

    本文介绍ThinkPHP的limit()方法的用法。limit方法可以用于对数据库操作的结果进行取指定范围的条数。即相当于是在mysql查询语句中的limit子句
    2016-04-04
  • thinkphp5实现微信扫码支付

    thinkphp5实现微信扫码支付

    这篇文章主要为大家详细介绍了thinkphp5实现微信扫码支付,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-12-12
  • Yii2简单实现多语言配置的方法

    Yii2简单实现多语言配置的方法

    这篇文章主要介绍了Yii2简单实现多语言配置的方法,涉及Yii配置文件的设置及语言包的操作方法,需要的朋友可以参考下
    2016-07-07
  • PHP实现上传图片到 zimg 服务器

    PHP实现上传图片到 zimg 服务器

    zimg是一个具有图片处理功能的图片存储服务,你可以上传图片到zimg服务器,然后通过带有参数的URL来获取被处理过的图片,今天我们的主要内容是使用php实现图片上传到zimg服务器上,希望大家能够喜欢
    2016-10-10
  • 基于php实现七牛抓取远程图片

    基于php实现七牛抓取远程图片

    由于公司网站之前的用户头像都是存储在自己的服务器上的,后来感觉管理不方便,新增加的用户头像都上传到了七牛,为了方便统一管理,领导说把本地服务器的头像全部迁移到了七牛
    2015-12-12
  • 利用switch语句进行多选一判断的实例代码

    利用switch语句进行多选一判断的实例代码

    下面小编就为大家带来一篇利用switch语句进行多选一判断的实例代码。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-11-11
  • Laravel5中实现模糊匹配加多条件查询功能的方法

    Laravel5中实现模糊匹配加多条件查询功能的方法

    这篇文章主要介绍了Laravel5中实现模糊匹配加多条件查询功能的方法,结合实例形式分析了Laravel5多条件模糊查询及相关封装操作技巧,需要的朋友可以参考下
    2018-03-03

最新评论