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查询,检索多表联合后字段内容