一、安装 Solr

solr需要 Tomcat环境 所以我们需要先装 Tomcat,而安装tomcat之前需要先安装JDK,所以我们第一步就是先安装 JDK

1、安装 JDK

2、安装 Tomcat8

Linux 可以安装在 :/usr/local/tomcat

Windows 我是安装在了 D 盘下面 :D:\tomcat     
(windows的下载和设置 可以看 http://www.pc6.com/softview/SoftView_441381.html)

3、安装 Solr

wget http://mirrors.hust.edu.cn/apache/lucene/solr/7.4.0/solr-7.4.0.tgz

(1) Linux 解压到 opt 后进入 solr-7.4.0文件夹 ,把里面 server/solr-webapp 拷贝到 tomcat下的webapps里,并重命名为solr

cp -r /opt/solr-7.4.0/server/solr-webapp/webapp/ /usr/local/tomcat/webapps/
cd /usr/local/tomcat/webapps/
mv webapp/ solr

(2) 把 solr-7.4.0\server\lib\ext 下的所有jar包 拷贝到 tomcat\webapps\solr 项目的WEB-INF\lib下

cd /opt/solr-7.4.0/server/lib/ext/cp * /usr/local/tomcat/webapps/solr/WEB-INF/lib/

把 solr-7.4.0\server\lib 目录下gmetric4j-1.0.7.jar和 lib目录下 metrics开头的jar包拷贝到 tomcat\webapps\solr 项目的WEB-INF\lib下

cd /opt/solr-7.4.0/server/libcp gmetric4j-1.0.7.jar metrics-* /usr/local/tomcat/webapps/solr/WEB-INF/lib/

(3) 把 solr-7.4.0\server 下面的 solr 文件夹拷贝到  tomcat/webapps/solr 下面 ,并重命名为 solrhome (注意:不要放在中文目录下面)

cd /opt/solr-7.4.0/server/cp -r solr /usr/local/tomcat/webapps/solr/solrhome

(4)/usr/local/tomcat/webapps/solr/WEB-INF\web.xml,修改如下,找到以下代码 把注释去掉 然后把 /put/your/solr/home/here 改为你自己的solrhome的路径,我的路径是/usr/local/tomcat/webapps/solr/solrhome (这里改的是绝对地址)

<env-entry><env-entry-name>solr/home</env-entry-name><env-entry-value>/usr/local/tomcat/webapps/solr/solrhome</env-entry-value><env-entry-type>java.lang.String</env-entry-type></env-entry>

(5)把 solr-7.4.0\server\resources下的log4j2.xml 拷贝到 /usr/local/tomcat/webapps/solr/WEB-INF/classes , 没有classes文件夹的话就新建一个

    mkdir -p /usr/local/tomcat/webapps/solr/WEB-INF/classescp /opt/solr-7.4.0/server/resources/log4j2.xml  /usr/local/tomcat/webapps/solr/WEB-INF/classes/

(6)在 /usr/local/tomcat/webapps/solr/WEB-INF/web.xml  里面找到以下代码 ,将其注释

    <security-constraint><web-resource-collection><web-resource-name>Disable TRACE</web-resource-name><url-pattern>/</url-pattern><http-method>TRACE</http-method></web-resource-collection><auth-constraint/></security-constraint>

到这里 就可以访问浏览器了 : http://127.0.0.1:8080/solr/index.html

(把 127.0.0.1 换成你自己的服务器ip地址就可以了)

(注意:如果没有不能打开 有可能是端口被占用 或者 tomacat 没有启动)

二、配置Solr 索引数据库

我们要用 Solr查 数据,首先要把我们数据库要用到的数据 先导入到 Solr 的库里,以下步骤就是 Solr 连接数据库的一些配置

1、建立 索引库

(1)以上操作后会在/usr/local/tomcat/webapps/solr/sorlhome/下面新建一个 new_core 的文件夹,查看在new_core下面有没有以下文件:

如果没有 可以将solr-7.4.0/example/example-DIH/solr/db下的文件 拷贝到 /usr/local/tomcat/webapps/solr/sorlhome/new_core下

cp -r /opt/solr-7.4.0/example/example-DIH/solr/db/* /usr/local/tomcat/webapps/solr/sorlhome/new_core

然后在 new_core 文件夹下面新建一个 data 文件 用来放数据

(2)导入数据还需要jar包

① 下载 mysql驱动包,放到/usr/local/tomcat/webapps/solr/WEB-INF/lib/ 目录下

 wget http://central.maven.org/maven2/mysql/mysql-connector-java/6.0.6/mysql-connector-java-6.0.6.jar

② 拷贝dist文件夹里的solr-dataimporthandler-7.2.0.jar

cp  /opt/solr-7.4.0/dist/solr-dataimporthandler-* /usr/local/tomcat/webapps/solr/WEB-INF/lib/

③ 拷贝lucene-libs文件夹里的中文分析器的jar包

cp  /opt/solr-7.4.0/contrib/analysis-extras/lucene-libs/* /usr/local/tomcat/webapps/solr/WEB-INF/lib/

④ 打开new_core下的conf目录在solrconfig.xml、db-data-config.xml、managed-schema中进行配置,

首先solrconfig.xml,查看里面有没有以下代码,没有的话添加进去

<lib dir="../../../dist/" regex="solr-dataimporthandler-.*\.jar" />
<lib dir="../../../dist/" regex="mysql-connector-java-.*\.jar" />
    <requestHandler name="/dataimport" class="org.apache.solr.handler.dataimport.DataImportHandler"><lst name="defaults"><str name="config">data-config.xml</str></lst></requestHandler>

然后 db-data-config.xml ,把数据库连接和需要导入的sql语句和字段配置好(我这边的数据是连表查询的数据,根据你自己的需要写sql语句)

<dataConfig><dataSource driver="com.mysql.jdbc.Driver" url="jdbc:mysql://106.15.228.67:3306/b2b_aoce" user="aoce" password="xy121228562!" /><document><entity name="products"query="SELECTp.id,s.id as sid,p.`name`,p.`shop_id`,c1.`name` AS first_cat_name,c2.`name` AS second_cat_name,c3.`name` AS third_cat_name,b.`name` AS brand,b.`logo` AS brand_logo,s.price,s.sale_price,s.attributes,p.cover_imageFROMproducts p,product_categories c1,product_categories c2,product_categories c3,product_brands b,product_skus sWHEREp.brand_id = b.idAND p.product_type=1AND s.product_id = p.idAND p.first_cat = c1.idAND p.second_cat = c2.idAND p.third_cat = c3.idORDER BYp.id DESC"><field column='id' name='id' /><field column='sid' name='sid' /><field column='name' name='name' /><field column='shop_id' name='shop_id' /><field column='brand' name='brand' /><field column='brand_logo' name='brand_logo' /><field column='first_cat_name' name='first_cat_name' /><field column='second_cat_name' name='second_cat_name' /><field column='third_cat_name' name='third_cat_name' /><field column='price' name='price' /><field column='sale_price' name='sale_price' /><field column='attributes' name='attributes' /><field column='cover_image' name='cover_image' /></entity></document>
</dataConfig>

最后 managed-schema 里面根据你要查询的字段配置以下,uniqueKey 的type类型必须要string,其它的可以根据你自己的字段设置,text_ik这个是我设置的中文分词类型 ,后面会讲

   <field name="id" type="string" indexed="true" stored="true" required="true" multiValued="false" /><field name="sid" type="pint" indexed="true" stored="true" multiValued="false" /><field name="shop_id" type="pint" indexed="true" stored="true" multiValued="false" /><field name="name" type="text_ik" indexed="true" stored="true"/><field name="brand" type="string" indexed="true" stored="true"/><field name="brand_logo" type="string" indexed="true" stored="true"/><field name="cover_image" type="string" indexed="true" stored="true"/><field name="first_cat_name" type="string" indexed="true" stored="true" multiValued="false"/><field name="second_cat_name" type="string" indexed="true" stored="true" multiValued="false"/><field name="third_cat_name" type="string" indexed="true" stored="true" multiValued="false"/><field name="attributes" type="string" indexed="true" stored="true" multiValued="false"/><field name="price"  type="pfloat" indexed="true" stored="true"/><field name="sale_price"  type="pfloat" indexed="true" stored="true"/>
<uniqueKey>id</uniqueKey>

⑤ 下载ik分词器 并将jar包放在WEB-INF 的lib下

http://search.maven.org/remotecontent?filepath=com/github/magese/ik-analyzer-solr7/7.x/ik-analyzer-solr7-7.x.jar

然后编辑 new_core/conf/managed-schema 加入ik中文分词器

<fieldType name="text_ik" class="solr.TextField"><analyzer type="index"><tokenizer class="org.wltea.analyzer.lucene.IKTokenizerFactory" useSmart="false" conf="ik.conf"/><filter class="solr.LowerCaseFilterFactory"/></analyzer><analyzer type="query"><tokenizer class="org.wltea.analyzer.lucene.IKTokenizerFactory" useSmart="true" conf="ik.conf"/><filter class="solr.LowerCaseFilterFactory"/></analyzer></fieldType>

三、使用 Solr

1、php使用solr

(1)下载php的solr扩展 https://pecl.php.net/package/solr  选择最新版本

注意:php有Thread Safe和NoneThread Safe之分,下载之前,请先确定你安装的php是哪种类型。

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

2、在Laravel项目中使用Solr

(1)安装Laravel 的solr依赖

composr require solarium/solarium

执行完成后 ,在composer.json的"require" 中增加了一项

"solarium/solarium": "^4.0"

就成功了~

(2)搜索 ,注意 实例化的时候 要把 类先引入进来

/*** 首页全文搜索* @return \Illuminate\Support\Collection*/public function searchProduct(Request $request){$data = $request->all();$key=$data['key'];//搜索传入的字段if(isset($data['page']) && !empty($data['page'])){//page是第几页if($data['page']==1){$start=0;}else{$start=($data['page']-1)*15;}}else{$start=0;}if(isset($data['order']) && !empty($data['order'])){//我这里的order是用于根据什么排序if($data['order']==4){$sort=['sale_price','asc'];}else{$sort=['id','asc'];}}else{$sort=['id','asc'];}if(isset($data['sale_price']) && !empty($data['sale_price'])){//筛选价格范围$price_start=$data['sale_price']['start'];$price_end=$data['sale_price']['end'];}else{$price_start='*';$price_end='*';}//solr数据库配置$options = ['endpoint' => ['localhost' => ['host' => '127.0.0.1',  //IP地址'port' => 8080,         //端口号'core' => null,'path' => '/solr/new_core',//solr 索引库位置'wt'=>'json',],],];$client = new Client($options);//实例化 solr类$query = $client->createSelect();//创建查询$query->setStart($start);//用于分页 从第几条取,初始0$query->setRows("15");//用于分页 每次取多少条$query->setQuery($key);// 筛选条件$query->createFilterQuery('sale_price')->setQuery('sale_price:['.$price_start.' TO '.$price_end.']');
//筛选价格范围if(isset($data['brand']) && !empty($data['brand'])) {$query->createFilterQuery('brandName')->setQuery('brandName:'.$data['brand']);
//筛选的品牌}if(isset($data['first_cat_name']) && !empty($data['first_cat_name'])) {//分类查询
$query->createFilterQuery('first_cat_name')->setQuery('first_cat_name:'.$data['first_cat_name']);//筛选产品分类}$query->addSort($sort[0],$sort[1]);//排序$query->setQueryDefaultField("name");//默认筛选 key 的字段名字,我这里是查产品名字$facetSet = $query->getFacetSet();// facet 开启,facet 是用于 查询符合筛选的全部产品的分组,比如我搜索了 “海康”,取了 第一页 15条数据,它会另外返回我一个 符合筛选条件的数据的全部品牌分组if(!isset($data['brand'])) {$facetSet->createFacetField('brand')->setField('brand');//facet 获得品牌分组}if(!isset($data['first_cat_name'])) {$facetSet->createFacetField('first_cat_name')->setField('first_cat_name');//facet获得分类分组}$resultset = $client->select($query);// 查询 执行if(!isset($data['brand'])) {$resultset->getFacetSet()->getFacet('brand');//facet 在select 执行前 set,在select执行后需要再 get 一下}if(!isset($data['first_cat_name'])) {$resultset->getFacetSet()->getFacet('first_cat_name');}$response= $resultset->getData();//取数据$response=(array)$response;return $this->success(ErrorConst::SUCCESS_CODE,$response);}

(3)新增 ,我这里就用写死的数据代替了

 /*** 首页全文搜索* 增加索引/更新索引(根据所传id是否已经存在,存在则更新,否则新增)* @return \Illuminate\Support\Collection*/public function updateSearchProduct(Request $request) {$options = ['endpoint' => ['localhost' => ['host' => '127.0.0.1',  //IP地址'port' => 8080,         //端口号'core' => null,'path' => '/solr/new_core','wt'=>'json',],],];$client =new Client($options);$data=array("id"=>"15339","sid"=>9867,"shop_id"=>41,"second_cat_name"=>"摄像机","first_cat_name"=>"视频监控","price"=>380.0,"name"=>"海康威视POE供电网络监控摄像头","third_cat_name"=>"网络高清摄像机","attributes"=>"3:机型,12:枪型;4:分辨率,27:500万像素;5:供电,33:DC12V;6:红外夜视,40:30米;9:外壳,98:铝合金","cover_image"=>"http://xxxx.com/upload/image/19480/qp3z5ujfw2nxy4mtclhg1533605053.jpg","brand"=>"海康威视",);$update=$client->createUpdate($data);$doc=$update->createDocument();foreach ($data as $key=>$value){$doc->$key=$value;}$update->addDocument($doc);$update->addCommit();$updateResponse=$client->update($update);$res = $updateResponse->getResponse();return $this->success(ErrorConst::SUCCESS_CODE,$res->getStatusCode());}

(4)删除

    public function delete(Request $request) {$data = $request->json()->all();$id=$data['id'];//solr数据库配置$options = ['endpoint' => ['localhost' => ['host' => '127.0.0.1',  //IP地址'port' => 8080,         //端口号'core' => null,'path' => '/solr/new_core',//solr 索引库位置'wt'=>'json',],],];$client = new Client($options);//实例化 solr类$update = $client->createUpdate();$update->addDeleteById($id);//通过id//$update->addDeleteQuery($q);//通过查询条件$update->addCommit();$result = $client->update($update);$res = $result->getResponse();return $res->getStatusCode();}

laravel solr使用PHP(Laravel)实现Solr全文搜索详细过程相关推荐

  1. 纯MongoDB实现中文全文搜索

    广州天勤数据有限公司 赖勇浩 摘要 MongoDB在2.4版中引入全文索引后几经迭代更新已经比较完美地支持以空格分隔的西语,但一直不支持中日韩等语言,社区版用户不得不通过挂接ElasticSearch ...

  2. 纯 MongoDB 实现中文全文搜索

    本文来自获得<2021MongoDB技术实践与应用案例征集活动>一等奖作品 摘要 MongoDB在2.4版中引入全文索引后几经迭代更新已经比较完美地支持以空格分隔的西语,但一直不支持中日韩 ...

  3. CentOS6.9编译安装Sphinx并使用php7的sphinx扩展实现全文搜索

    本篇笔记记录了CentOS6.9编译安装Sphinx,编译安装php-sphinx扩展,并使用php7的sphinx扩展实现全文搜索的过程 nginx+mysql+php安装请参考以下笔记: Cent ...

  4. 全文搜索!收藏这篇Solr ElasticSearch 长文就可以搞定

    转载自  全文搜索!收藏这篇Solr ElasticSearch 长文就可以搞定 摘自:JaJian`博кē Java后端技术编者说:文章从浅到深,描述了什么是全文搜索,为什么要使用全文搜索,Solr ...

  5. solr 5.3.1 使用java_Apache Solr 5.3.1 发布下载,Java 全文搜索服务器

    Apache Solr 5.3.1 发布下载,主要更新内容如下: Bug 修复  (10)SOLR-7949: Resolve XSS issue in Admin UI stats page (Da ...

  6. Laravel 使用 scout 集成 elasticsearch 做全文搜索

    安装需要的组件 composer require tamayo/laravel-scout-elastic composer require laravel/scout 如果composer requ ...

  7. php中文搜索工具,Laravel 下 TNTSearch+jieba-PHP 实现中文全文搜索

    TNTSearch+jieba-php这套组合可以在不依赖第三方的情况下实现中文全文搜索: 特别的适合博客这种小项目: 开启php扩展 pdo_sqlite sqlite3 mbstring 开始: ...

  8. solr全文搜索的使用

    目录 1.solr的使用 与配置 1.1 solr中开启服务 1.2介绍solr 与用途 1.3 下载好solr 解压后我们开启solr 使用solr自带服务器 1.3 数据库驱动 1.4solr集成 ...

  9. 内网solr全文搜索服务器,快解析一步映射让外网访问

    Solr,指apache solr,其全称为Search On Lucene Replication.Solr,是一个高性能,采用java开发,基于Lucene的全文搜索服务器.同时对其进行了扩展,提 ...

最新文章

  1. 并行计算实战-双调排序
  2. WINCE开发更安全可靠设备驱动的最佳实践
  3. Java 中的四种引用
  4. Anroid推送服务
  5. 手写自己的MyBatis框架-V2.0结果集处理
  6. 云栖专辑| 阿里毕玄:程序员的成长路线
  7. php 静态页面模板类,dedetag.class.php 静态模板类
  8. window覆盖导航栏
  9. ubuntu 安装 swoole 和mac 安装swoole 扩展
  10. windows server2008 r2 下启用 sqlserver 2008的远程连接
  11. 正面刚谷歌苹果,diss了BAT及友商,商汤科技说自己是一只“黑羊”
  12. java懒加载注解_在springboot中实现个别bean懒加载的操作
  13. Spring Boot2 服务假死排查分析记录
  14. 信息 按顺序打印commit_Git 工作流,看这一篇就够了
  15. 【MATLAB】矩阵运算
  16. 匹配 网络 Q值 带宽
  17. win快捷键失效,win+d,win+e等快捷键功能修复
  18. Java: 猜拳游戏
  19. 华为P40的软文营销文案
  20. 原谅帽大作战游戏程序

热门文章

  1. 在VB中使用水晶报表总结
  2. Asp.net 微信H5唤起支付和支付回调
  3. Domain Specific Compiling: 领域编译器发展的前世今生 • 面向AI的编译技术
  4. 《游戏设计快乐之道(第2版)》一第1章 什么是设计师
  5. mysql查询+函数语句基本运用
  6. 孙茂松:深度学习的红利我们享受得差不多了
  7. 计算机研究生博士课程设置,计算机科学与技术学科博士研究生培养方案.docx
  8. ubundu操作提示
  9. 绝了,这6个精挑细选的机器学习资料简直太香了
  10. Markdown换行语法