当前位置: 首页 > news >正文

solr php mysql_php使用solr全文搜索引擎

前言

本来以为网上已经有了类似博文,不想重复,可是一圈搜下来,都是一些内容不甚明了的文章,或者solr版本太过老,参考价值不高,更有甚者,直接拷贝的别人的内容。一篇博客,各大平台都能看到,也不见转载链接。有人说百度搜索不到内容,用谷歌,把责任推到百度身上,但这是百度的原因吗?在国内网络的资源整体质量不高低,并且内容太多重复的情况下,百度能够提供什么高质量的内容给你。

也有我搜索资源的时候,会看到IBM开者中心的翻译文档,在文章的最后,都会附上参考文章,但是在国内,显有这种情况。那些拷贝别人博文的人,有没有想过,写一篇博文的不易?同样,博文作者是否也想过这个问题?话不多说,进入正题。

声明:因为本人不是从事java开发,而且技术不高,英语也很差,如果文章中存在错误的解说,望谅。

参考文章:

window环境

1,安装solr

下载solr,选择相应版本,注意:因为solr对是基于java的,所以必需安装jre。每个版本的 solr对jre版本要求不一样,下载时请注意solr的版本。

编写这篇博文时,solr的最新版本是6.6,文章也是基于6.6版本写的,其要求1.8版本或以上的jre。jre的安装,这些就不列出了,因为太过简单。

Window用户请下载zip包

1901e9a8e8fe52513cfca8bd35bbe004.png

将压缩包解压到相应目录

使用命令行工具,进入解压后的solr目录的bin目录

启动solr

运行命令: bin\solr.cmd start

1a2b9d567afd3e23b3c9d9317689f688.png

注意:solr有两种模式:core,collection,如果要使用collection,请加-c或者-cloud,启用solrClund。两者之间的区别,我不敢妄下定论。从搜索的资料综合分析,一个是单机,一个是集群,此处仅供参考,可能存在错误。

solr默认监听的是8983端口

更多命令用法,请使用solr -help,如果solr已经启动,请使用solr start -help。

如果启动成功,可以在浏览器中打开:http://localhost:8983/solr/,使用其web管理客户端。

2,查看solr范例

先停止solr实例

bin\solr.cmd stop

再启用solr范例

bin\solr.cmd -e techproducts

打开web管理客户端:http://localhost:8983/solr/,查看结果

7fc2a5d61de3b8b231b73672fef748a6.png

根据结果,可知道,techproducts范例中共有32篇文章。

现在可以尝试他的查询功能。

我在q输入框中输入了Samsung,其得到的结果如下图

8d1ab31d99a42bd00aa263a90c9a391a.png

3,添加文档

0b69a2230fb926e0712a72bfb6c54d3f.png

09df686b127996bb1ebdd6ad68b7590f.png

添加好后,进入查询界面,看能否查到这篇文档

c719a6685c42a271b2957862d3879884.png

4,删除文档

ee40587d46ac5d386ef1cd193a14aff4.png

返回查询界面,查询删除后的结果

71204cae402a83dd6607a33828044158.png

关于文档操作更详细的说明请参考:

5,创建solr项目

现在学会一些基本的操作,可以自己创建一个项目录了。

先把停止solr

solr.cmd stop -all

solr是一个实例可以有多个core或collection,如果不先停止,创建的core将会添加到启用的techproducts实例中

solr.cmd create -c test

080fa2d9ba3d039be688876eb2993dff.png

重新刷新web客户端

7ce2eb73a20accc97ef4bf03541c44b7.png

6,下载php的solr扩展

现在开始使用php和solr交互了,所以必需安装solr扩展,下载地址

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

我默认所有读者都知道php扩展配置方式,所有这里不详细描述。

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

7,使用php脚本添加文档

$options = array('hostname' => "localhost",

'path' => 'solr/test',

'port' => '8983',);$client = new SolrClient($options);$data = array(array('id' => 'EN80922032',

'name' => '男士打磨直筒休闲牛仔裤',

'brand' => 'ENERGIE',

'cat' => '牛仔裤',

'price' => '1870.00'),

array('id' => 'EN70906025',

'name' => '品牌LOGO翻领拉链外套',

'brand' => 'ENERGIE',

'cat' => '外套',

'price' => '1680.00'),);foreach($data as $key => $value) {$doc = newSolrInputDocument();foreach($value as $key2 =>$value2) {$doc->addField($key2,$value2);

}$client->addDocument($doc);

}$client->commit();

在solr的web客户端查询的结果

3e033292193c7fddf24053de8053b3f5.png

注意:参考官方文档时,注意其连接参数,依其博文必需有path参数,path参数是"solr/",加上你用solr创建的core名称。

9,使用php脚本查询文档

$options = array('hostname' => "localhost",

'path' => 'solr/test',

'port' => '8983',);$client = new SolrClient($options);$query = newSolrQuery();$query->setQuery('打磨');$query->setStart(0);$query->setRows(50);$query->addField('name');$query_response = $client->query($query);$response = $query_response->getResponse();print_r($response);

输入的结果

SolrObject Object(

[responseHeader]=> SolrObject Object(

[status]=> 0[QTime]=> 3[params]=> SolrObject Object(

[q]=>打磨

[indent]=>on

[fl]=>name

[start]=> 0[rows]=> 50[version]=> 2.2[wt]=>xml

)

)

[response]=> SolrObject Object(

[numFound]=> 1[start]=> 0[docs]=> Array(

[0] => SolrObject Object(

[name]=> Array(

[0] =>男士打磨直筒休闲牛仔裤

)

)

)

)

)

10,使用php脚本删除文档

$client->deleteByQuery('id:EN80922032');$result = $client->commit();print_r($result);

输出的结果不易看懂

可以使用第九条“使用php脚本查询文档”,查看删除后的结果,也可以用web客户端查看结果。

11,更新文档

更新文档和添加文档一样,只要在数据中指定要更新的id即可。

12,添加搜索建议

在添加的core的conf文件里sorlconfig.xml中新增一搜索建议组件。依本博文,目录地址为:solr-6.6.0\server\solr\test\conf\solrconfig.xml

配置只在solr6.6上经过测试,不能保证可在其他solr版本中使用

string

suggest

org.apache.solr.spelling.suggest.tst.TSTLookupFactory

title

true

true

true

suggest

10

suggest

23,添加中文分词

solr自带了中文分词功能,依本博文,目录地址为:solr-6.6.0\contrib\analysis-extras\lucene-libs\lucene-analyzers-smartcn-6.6.0 .jar。

首先查看sorlconfig.xml配置文件是否已经配置了这个分配库的地址

如果没有,请配置分词库的地址。

在managed-schema文件中新增一个字段类型

然后将相应字段的类型设置成text_cn,例如,本博文中将name设为text_cn类型

在后台选择相应的core,点击【analysis】菜单,在字段值中输入相应中文,在Fieldname/FieldType中选择相应设置了字段类型为text_cn的字段,或者直接选择text_cn字段类型,点击【analysis】查看分词效果

7e0ab873835425448114da700f8ab5e0.png

为什么要设置中文分词呢?

在说原因之前,我们先查看使用其他字段类型分析结果。

0bcbc94e80da232a9df83ab464327823.png

solr因为不支持中文,将会对内容时行最小分割,一个词一个索引,如果不使用中文分词,将产生大量的索引,以满足中文的搜索需求。(此为个人观点,未佐证,请务盲目相信)。

另外,如果不使用中文分词,那搜索建议只能返回单个中文字。新增一条文档记录,测试搜索建议的结果是否真是如此。

注意:测试这个功能时,请将含有中文的字段改为未设置中文分词的字段类型,更改后重启solr,并重新添加一条文档,文档中的中文词汇必需是 solr现有文档中不存在的词汇。

新增文档

96ebbfb6fbd9bcf6b2aa1dbd2f030a60.png

以下是浏览器搜索结果

9ebb05f5c22ab8076febd593fdcd4f38.png

测试成功,我们将此文档删除,并重新添加这个文档,将字段类型更为中文分词类型,即本博文中新增的 text_cn 。

注意:删除文档之后,最好查询一下,solr中是还存在此文档,以防重复文档未被删除.

f3ced5f2bd050cf42ee330cad353d19a.png

再次搜索

16a38db3244ea4a7d500f2972a673c7f.png

结语:水平有限,只能写这么多。如果有时间,我将持续更新此博文。

相关文章:

  • mysql前n名_MySQL 选择前n个记录
  • python 实现字典树_python 字典树(前缀树)基本操作:插入,删除、查找
  • java 1.9_JAVA-1.9-上机
  • java程序入口_浅析java程序入口main()方法
  • java 下载 docx文件_java 写个controller下载文件(word);两种方式
  • javascript java难度_javascript比java难吗?
  • java map cache_java Map实现的cache manager
  • java中的链表类_6.JAVA-链表实例
  • java 二分查找 简书_二分查找的三种模板(C++,Java,Python)
  • 用java实现矩阵链乘积_矩阵最优链乘及Java实现
  • java泛型 语法_Java泛型中的? super T语法
  • java 模块化 组件化_关于模块化、组件化的理解
  • java isnull方法_Java 检查判断变量null(空值)的方法示例代码
  • java容器类的实现_java容器类总结——基于JDK1.8
  • MySQL实验7存储过程_存储过程 · MySQL5.7文档 · 看云
  • 2017 年终总结 —— 在路上
  • const let
  • CSS居中完全指南——构建CSS居中决策树
  • echarts的各种常用效果展示
  • HTML5新特性总结
  • nfs客户端进程变D,延伸linux的lock
  • nginx 配置多 域名 + 多 https
  • SQLServer之索引简介
  • vue2.0项目引入element-ui
  • 闭包--闭包作用之保存(一)
  • 搭建gitbook 和 访问权限认证
  • 多线程事务回滚
  • 服务器从安装到部署全过程(二)
  • 基于axios的vue插件,让http请求更简单
  • 将回调地狱按在地上摩擦的Promise
  • 聊聊sentinel的DegradeSlot
  • 猫头鹰的深夜翻译:JDK9 NotNullOrElse方法
  • 漂亮刷新控件-iOS
  • 推荐一款sublime text 3 支持JSX和es201x 代码格式化的插件
  • 小程序 setData 学问多
  • 协程
  • 这几个编码小技巧将令你 PHP 代码更加简洁
  • 【云吞铺子】性能抖动剖析(二)
  • $ is not function   和JQUERY 命名 冲突的解说 Jquer问题 (
  • (Note)C++中的继承方式
  • (pytorch进阶之路)CLIP模型 实现图像多模态检索任务
  • (附源码)spring boot儿童教育管理系统 毕业设计 281442
  • (附源码)ssm高校升本考试管理系统 毕业设计 201631
  • (九十四)函数和二维数组
  • (每日持续更新)信息系统项目管理(第四版)(高级项目管理)考试重点整理第3章 信息系统治理(一)
  • (全注解开发)学习Spring-MVC的第三天
  • (转)Linux NTP配置详解 (Network Time Protocol)
  • (转)Mysql的优化设置
  • *_zh_CN.properties 国际化资源文件 struts 防乱码等
  • .NET CLR Hosting 简介
  • .NET CORE Aws S3 使用
  • .NET Core工程编译事件$(TargetDir)变量为空引发的思考
  • .NET MVC第三章、三种传值方式
  • .NET 将混合了多个不同平台(Windows Mac Linux)的文件 目录的路径格式化成同一个平台下的路径
  • .net遍历html中全部的中文,ASP.NET中遍历页面的所有button控件