多语言展示
当前在线:1030今日阅读:126今日分享:42

php使用solr全文搜索引擎

java用solr的挺多的,但是PHP好像挺少。数据库模糊查询速度比较慢,由于在实际生活中,一般搜索是用的比较多的,这样数据库压力自然就很大,所以我们就让供专业的solr来做搜索功能。使用步骤呢,大概分为6步:1、下载安装java环境,配置环境变量2、下载安装solr,照着网上的solr安装一步步进行配置3、安装中文分词器,一般用IK分词器4、创建core。配置schema、联想词、停用词等5、PHP安装solr扩展6、写PHP代码实现solr增删改查此文章对于java和solr安装只是个大概,网上这类的文章很多,可以参考其他优秀的文章
工具/原料

java环境、启动solr、PHP安装solr扩展

java环境安装
solr安装和配置
1

百度“Solr7.5安装和使用详细教程(单机版)”参考,到后面导入索引数据我是照着这个做的,没有问题,所以你也可以。鉴于我的重点是PHP使用solr,所以我就下一步了官网下载solr,解压下载的压缩包即可完成Solr安装。

2

打开DOS,路径切换至solr_home\bin,执行命令:solr start –p 8983,将solr在8983端口运行,看到以下图片就证明solr启动成功了。solr_home是你下载之后解压的目录solr常用命令:solr start –p 8983 启动solr restart –p 8983 重启solr stop –p 8983 关闭

3

在浏览器访问:localhost:8983,会出现以下页面。solr安装就算完成了。

PHP引用solr
1

PHP安装solr扩展下载php的solr扩展 https://pecl.php.net/package/solr  选择最新版本注意:php有Thread Safe和NoneThread Safe之分,下载之前,请先确定你安装的php是哪种类型。

2

下载解压之后,将其中的dll文件放到php的扩展目录,然后在php.ini开启solr扩展,再通过phpinfo查看是否正常安装[solr]extension=php_solr.dll

3

做了这么多,才算准备工作做完,终于可以开始撸代码了前面参考的链接,已经完成了从数据库添加数据到solr所以先介绍PHP查询solr吧//solr数据库配置    $options = array(    'hostname' => 'localhost',    'path'     => 'solr/ykb_shop_solr_many',//你创建的核心名字    'port'     => '8983',);//solr客户端创建$client = new SolrClient($options);$query = new SolrQuery(); //solr简易查询条件生成$keyword = isset($_POST['keyword'])&&!empty($_POST['keyword'])?$_POST['keyword']:'苹果'; $query->setQuery($keyword);$query->setStart(0);$query->setRows(10);$query_response = $client->query($query);$response = $query_response->getResponse();$count = $response['response']['numFound'];$arr = $response['response']['docs'];

4

// 通过PHP从数据库获取商品数据导入到solr搜索引擎    $sql = ' SELECT * FROM ' . $ecs->table('goods') . ' WHERE user_id =2334  limit 10';    $data = $db->getAll($sql);//循环整理数据,这里可以根据你的实际情况addField    foreach ($data as $key => $value) {        $doc = new SolrInputDocument();         $doc->addField('goodId', $value['goods_id']);        $doc->addField('goods_name', $value['goods_name'].'20190909');        $doc->addField('goods_number', $value['goods_number']);        $doc->addField('goods_sn', $value['goods_sn']);        $doc->addField('cat_name', '其他');        $doc->addField('brand_name', '测试店铺1');        $doc->addField('shop_price', $value['shop_price']);        $doc->addField('rz_shopName', '测试店铺1');        $doc->addField('id',$value['goods_id']);//当索引文档中主键id值存在时,会更新原文档,不存在则会添加文档。我这里商品id是唯一的,所以这样使用        $response = $client->addDocument($doc);    }//提交    $client->commit();可以搜索到刚刚从数据库导入的商品

5

好了,故事到这里就结束了,未来你还会遇到很多问题,比如搜索结果不准确,想要的结果跟实际的效果不一样,商品权重问题,有没有特殊字符也可能影响搜索结果,等等。希望我们披荆斩棘,走过重重难关。最后演示一个联想词的效果祝你好运

推荐信息