最新消息: 新版网站上线了!!!

solr php 多表联合join查询,检索多表联合后字段内容

一、说明

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