设为首页收藏本站
网站公告 | 这是第一条公告
     

 找回密码
 立即注册
缓存时间13 现在时间13 缓存数据 到现在一共是295天,有了人生中第一张迷你专辑,我期许自己这不会是句号,只会是个逗号,会一直一直一直突破的,直到我唱不动的那天。

到现在一共是295天,有了人生中第一张迷你专辑,我期许自己这不会是句号,只会是个逗号,会一直一直一直突破的,直到我唱不动的那天。 -- 一种原谅

查看: 837|回复: 0

PHP WindSearch实现站内搜索功能

[复制链接]

  离线 

TA的专栏

  • 打卡等级:热心大叔
  • 打卡总天数:216
  • 打卡月天数:0
  • 打卡总奖励:7758
  • 最近打卡:2024-11-13 12:48:40
等级头衔

等級:晓枫资讯-上等兵

在线时间
11 小时

积分成就
威望
0
贡献
463
主题
426
精华
0
金钱
9120
积分
912
注册时间
2022-12-29
最后登录
2025-5-31

发表于 2025-5-31 06:30:46 | 显示全部楼层 |阅读模式
WindSearch是一个基于中文分词,由纯PHP开发全文检索引擎,可快速搭建PHP站点的站内搜索,他没有任何繁琐的安装配置、不需要维护调优、不占用服务器内存、可与PHP项目完美融合在一起。
github地址:github.com/rock365/windsearch

必须极速安装~

使用composer安装:
  1. composer require rock365/windsearch
复制代码
或 使用Git安装:
  1. git clone git@github.com:rock365/windsearch.git
复制代码
或 直接前往github: github.com/rock365/windsearch

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

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

即用模式

“即用模式”可以立即导入数据,无任何配置,支持int主键、uuid主键,适合简单的搜索场景。即用模式的各种api均有
  1. fast
复制代码
关键字。
“即用模式”的原理:对字符串进行ngram分词,搜索的结果是主键集合,你可以使用这些集合从MySQL等数据库查询原始数据。
引入文件:
WindSearch安装完成后,引入入口文件,注意具体文件路径
  1. require_once 'yourdirname/vendor/autoload.php';
复制代码
导入数据
  1. // 实例化对象
  2. $Wind = new \WindSearch\Index\Wind('test'); //test 当前索引库的名称
  3. // 清空之前的数据(如果之前使用即用模式导入过数据)
  4. $Wind->deleteFastIndex();
  5. // 批次导入数据
  6. // $res 是从数据库查询的数据
  7. foreach($res as $v){
  8.     $text = $v['title'];
  9.     $primarykey = $v['id'];
  10.     // $text是需要搜索的具体内容,比如title;$primarykey是主键值,比如id的值
  11.         $Wind->fastIndexer($text, $primarykey);
  12. }
  13. //每导入一批数据,就调用此方法进行保存
  14. $Wind->fastBatchWrite();

  15. // 所有数据全部导入完成后,接着构建索引(不一定非得紧接着调用,也可以在其它地方单独调用)
  16. $Wind->fastBuildIndex();
复制代码
开始搜索
  1. // 开始搜索
  2. $Wind = new \WindSearch\Index\Wind('test');
  3. // 调用搜索方法
  4. // $page 第几页 $listRows 每页多少条
  5. $res = $Wind->fastSearch($text,$page,$listRows)
  6. // $res:返回的主键(比如id)集合,你可以使用id集合从MySQL等数据库查询原始数据
复制代码
每个索引库都可以使用即用模式导入数据,数据单独存放,跟专业模式的数据不冲突,由于即用模式属于某个索引库的下属模块,所以删除某个索引库时,同样会删除即用模式的索引数据,所以一个索引库名称尽量只使用一种模式。
注意,即用模式的搜索效果可能比不上专业模式,可根据情况作出取舍。

专业模式

(专业的部分配合文档使用更佳)
引入文件:
WindSearch安装完成后,引入入口文件,注意具体文件路径
  1. require_once 'yourdirname/vendor/autoload.php';
复制代码
建索引库:
复制修改粘贴即可,跟mysql建表差不多
  1. $mapping = [
  2.           //设置索引库的名称,比如对应的表名
  3.     'name' => 'test',
  4.     // 字段配置
  5.     'field' => [
  6.         [
  7.             'name' => 'id',// 主键名称 主键必须设置
  8.             'type' => 'primarykey', //数据类型为主键 必须设置
  9.             'primarykey_type' => 'Int_Incremental', // int递增
  10.         ],
  11.         [
  12.             'name' => 'title',
  13.             'index' => true, // 是否索引此字段
  14.             'type' => 'text',
  15.             'analyzer' => 'segment', // 配置分词方式
  16.         ],
  17.         [
  18.             'name' => 'tags',
  19.             'index' => true,
  20.             'type' => 'keyword',
  21.         ]
  22.         [
  23.             'name' => 'score',
  24.             'type' => 'numeric',
  25.         ],
  26.         [
  27.             'name' => 'time',
  28.             'type' => 'date'
  29.         ],

  30.         [
  31.             'name' => 'descr',
  32.             'type' => 'text',
  33.         ],

  34.     ]

  35. ];

  36. // 实例化对象
  37. $Wind = new \WindSearch\Index\Wind('test'); //test 当前索引库的名称
  38. //检查是否存在此索引库
  39. $is_index = $Wind->checkIndex();
  40. // 如果存在此索引库
  41. if ($is_index) {
  42.     //删除索引库
  43.     $Wind->delIndex();
  44. }
  45. //创建索引库
  46. $Wind->createIndex($mapping);
复制代码
导入数据:
  1. //实例化引擎
  2. $Wind = new \WindSearch\Index\Wind('test');
  3. // 初始化
  4. $Wind->buildIndexInit();
  5. // 开启分词,导入数据时,加true可加快速度
  6. $Wind->loadAnalyzer(true);

  7. // 数据量小(内容少于一万条),则可以一次性全部导入
  8. // selectAll...
  9. // $result:一次性查询的所有内容
  10. foreach ($result as $v) {
  11.     $Wind->indexer($v);
  12. }
  13. // 批量写入文件保存
  14. $Wind->batchWrite();
复制代码
构建索引:
  1. // 数据导入结束后,接着可立即调用此方法构建索引
  2. // 注意,数据量大时,此步骤会比较耗时
  3. $Wind->buildIndex();
复制代码
开始搜索:
  1. //实例化引擎
  2. $Wind = new \WindSearch\Index\Wind('test');

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

  5. //开始搜索

  6. // 搜索单个字段
  7. $query = [
  8.     'match' => [
  9.         'field' => [
  10.             'name' => 'title',
  11.             'query' => $text,
  12.         ],
  13.         'list_rows' => $listRows, //每页多少条数据
  14.         'page' => $page, //第几页

  15.     ]

  16. ];

  17. // 搜索接口
  18. $res = $Wind->search($query, $page, $listRows);
  19. // 返回的最终结果,可直接渲染到前台页面
  20. $resArr = $res['result']['_source'];
复制代码
以上就是PHP WindSearch实现站内搜索功能的详细内容,更多关于PHP WindSearch站内搜索的资料请关注晓枫资讯其它相关文章!

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
晓枫资讯-科技资讯社区-免责声明
免责声明:以上内容为本网站转自其它媒体,相关信息仅为传递更多信息之目的,不代表本网观点,亦不代表本网站赞同其观点或证实其内容的真实性。
      1、注册用户在本社区发表、转载的任何作品仅代表其个人观点,不代表本社区认同其观点。
      2、管理员及版主有权在不事先通知或不经作者准许的情况下删除其在本社区所发表的文章。
      3、本社区的文章部分内容可能来源于网络,仅供大家学习与参考,如有侵权,举报反馈:点击这里给我发消息进行删除处理。
      4、本社区一切资源不代表本站立场,并不代表本站赞同其观点和对其真实性负责。
      5、以上声明内容的最终解释权归《晓枫资讯-科技资讯社区》所有。
http://bbs.yzwlo.com 晓枫资讯--游戏IT新闻资讯~~~
严禁发布广告,淫秽、色情、赌博、暴力、凶杀、恐怖、间谍及其他违反国家法律法规的内容。!晓枫资讯-社区
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|晓枫资讯--科技资讯社区 本站已运行

CopyRight © 2022-2025 晓枫资讯--科技资讯社区 ( BBS.yzwlo.com ) . All Rights Reserved .

晓枫资讯--科技资讯社区

本站内容由用户自主分享和转载自互联网,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。

如有侵权、违反国家法律政策行为,请联系我们,我们会第一时间及时清除和处理! 举报反馈邮箱:点击这里给我发消息

Powered by Discuz! X3.5

快速回复 返回顶部 返回列表