PHP开发实例大全(提高卷) 中文完整pdf扫描版[244MB]
一、说明
1、solr版本是7.7.0
2、系统环境windows
3、solr启动 直接进入solr文件夹下的bin目录,执行solr start
D:\solr-7.7.0\bin>solr start
4、查看这边文章假定你对solr有了一定了解,不如如何部署,如何生成core,如果导入mysql数据到solr等等,如有不解可以QQ联系。 QQ:1914421469
一、solr的安装省略
二、生成core省略(我实例中core目录为D:\solr-7.7.0\server\solr\core1)
三、开始 多表联合查询获取多表字段内容
1、配置core1下的db-data-config.xml(如果没有自己此文件,请自己创建)
<dataConfig> <dataSource driver="com.mysql.jdbc.Driver" url="jdbc:mysql://127.0.0.1:3306/testlink_quality" user="root" password="123456" /> <document> <entity name="mantis_bug" query="SELECT b.id as id,b.summary as summary,b.description as description,n.`name` as project_name,s.`name` as status_name,u1.`first` as reporter_name,u2.`first` as handler_name FROM mantis_bug as b JOIN nodes_hierarchy as n ON b.project_id = n.id JOIN mantis_issue_statustype as s ON s.id = b.status_id JOIN users as u1 ON u1.id = b.reporter_id JOIN users as u2 ON u2.id = b.handler_id" pk="id"> <field column='id' name='id' /> <field column='summary' name='summary' /> <field column='description' name='description' /> <field column='project_name' name='project_name' /> <field column='status_name' name='status_name' /> <field column='reporter_name' name='reporter_name' /> <field column='handler_name' name='handler_name' /> </entity> </document> </dataConfig>
看到了吗,其实就是把sql的join查询写入到solr数据库实体中,操作之前看了网上很多实例,都是用多个core,然后使用跨core查询实现,看完觉得超级麻烦。
2、solrconfig.xml文件中插入如下配置信息,其实就是引入数据库配置文件db-data-config.xml
<!--数据库导入-->
<requestHandler name="/dataimport" class="org.apache.solr.handler.dataimport.DataImportHandler"> <lst name="defaults"> <str name="config">D:/solr-7.7.0/server/solr/core1/conf/db-data-config.xml</str> </lst> </requestHandler>
3、managed-schema文件中插入如下配置信息,其实就是你要查询信息的字段
<field name="description" type="text_ik" indexed="true" stored="true" /> <field name="summary" type="text_ik" indexed="true" stored="true" multiValued="true"/> <field name="project_name" type="string" indexed="true" stored="true" /> <field name="status_name" type="string" indexed="true" stored="true" /> <field name="reporter_name" type="string" indexed="true" stored="true" /> <field name="handler_name" type="string" indexed="true" stored="true" /> <copyField source="description" dest="summary" />
4、重启solr
5、php代码中调用solr扩展
php;toolbar:false">testlinkInitPage($db); $objArgs = initArgs($db); //获取参数,根据参数判断函数是否存在 $action = isset($_REQUEST['act']) ? trim($_REQUEST['act']) : 'ExecExport'; $function_name = 'act'.$action; //函数自动加载 if(function_exists($function_name)){ call_user_func($function_name,$objArgs); } /** * init_args * 定义$args对象 * return:Object */ function initArgs($db) { $args = new stdClass(); $args->db = $db; //设置solr $options = array( 'hostname' => 'localhost', 'path' => 'solr/bug', //bug为core名称,允许名称和对应目录命名不一致(对应目录为core1) 'port' => '8983' ); $args->solrClient = new SolrClient($options); $args->smarty = new TLSmarty(); //初始化smarty模板对象 return $args; } function actSearch($objArgs){ $keyword = $_REQUEST['keyword']; //搜索关键词,以“库存”为例 $type = $_REQUEST['type']; //bug testcase $query = new SolrQuery(); if($type == 'bug'){ bugSearch($objArgs,$keyword,$query); //缺陷查询 } } function bugSearch($objArgs,$keyword,&$query){ //$query->setQuery('summary:库存 or description:库存'); 在summary和description2个字段中搜索‘库存’关键词 $query->setQuery('summary:'.$keyword.' or description:'.$keyword); $query->setStart(1); $query->setRows(2); $query->addField('summary'); $query->addField('description'); $query->addField('project_name'); $query->addField('status_name'); $query->addField('reporter_name'); $query->addField('handler_name'); $query_response = $objArgs->solrClient->query($query); $responseObj = $query_response->getResponse(); // echo "<pre>"; // print_r($responseObj->response->docs); $objArgs->smarty->assign('responseArray',$responseObj->response->docs); $objArgs->smarty->display('search/bugSearch.tpl'); }
6、访问php调用solr
http://127.0.0.1/solrcase/lib/search/index.php?act=Search&keyword=%E5%BA%93%E5%AD%98&type=bug
7、查看结果
Array ( [0] => SolrObject Object ( [summary] => Array ( [0] => 20350重要物品出入库:物品入库成功后,库存余额一直是0 [1] => 重要物品入库:提交交易后,返回信息处库存余额显示为0 ) [status_name] => 已关闭 [handler_name] => 钱进 [description] => 重要物品入库:提交交易后,返回信息处库存余额显示为0 [reporter_name] => 路欢妮 [project_name] => 传统核心类系统集成测试 ) [1] => SolrObject Object ( [summary] => Array ( [0] => 20350重要物品出入库:库存为0时,进行出库交易时,系统应该给出相应提示,而不是出库成功 [1] => 前提:金银首饰的库存为0 1.选择操作标志出库 2.点击添加,选择重要物品种类:金银首饰 ,输入数量4,点击提交 3.点击提交,系统应该给出相应提示“库存为0” ) [status_name] => 已关闭 [handler_name] => 李元梦 [description] => 前提:金银首饰的库存为0 1.选择操作标志出库 2.点击添加,选择重要物品种类:金银首饰 ,输入数量4,点击提交 3.点击提交,系统应该给出相应提示“库存为0” [reporter_name] => 路欢妮 [project_name] => 传统核心类系统集成测试 ) )
转载请注明:谷谷点程序 » solr php 多表联合join查询,检索多表联合后字段内容