zoukankan      html  css  js  c++  java
  • solr6.3与MySQL结合使用的简明教程(二)

    一张表里查询多个字段

    在 前一篇教程里面,我们加了个db2内核。如果用户在系统里面的搜索框内输入一段文字,这段文字即可能是书名,也有可能是书的ISBN号,那么我们应该怎么做呢?

    找到 solr目录/example/example-DIH/solr/db2/conf/ 文件夹。打开 db-data-config.xml 文件。找到entity标签,更改query属性里面的SQL语句。利用MySQL的concat函数拼接一下两个字段的内容,并为这个新的返回列分配一个新的field。修改后的代码如下:

    <dataConfig>
      <dataSource type="JdbcDataSource" 
                  driver="com.mysql.jdbc.Driver"
                  url="jdbc:mysql://127.0.0.1:3306/db1" 
                  user="test_user" 
                  encoding="UTF-8"
                  password="123456"/>
      <document>
          <entity name="jynbook" processor="SqlEntityProcessor" pk="id"
              query="select c_id,c_name,c_isbn,concat(c_name,' ',c_isbn) zcq from t_book">
              <field name="id" column="c_id" />  
              <field name="name" column="c_name" />  
              <field name="isbn" column="c_isbn" />
              <field name="zcq" column="zcq" />  <!-- zcq是新加的 -->
          </entity>
      </document>
    </dataConfig>

    zcq就是我们新加的两字段一块查询的属性。 
    同时,我们要修改 managed-schema 文件。找到我们在 前一篇教程 里面加入的field标签,在其中再加入一个新的zcq标签。加完后的代码如下,仅仅显示关键代码:

    <field name="zcq" type="string" indexed="true" stored="true"/>

    重启solr并导入数据,就可以利用 zcq 进行检索了。

    多张并列关系的表,导入并查找数据

    准备测试用的数据。下面是建立表结构的DDL:

    CREATE DATABASE `db3` /*!40100 DEFAULT CHARACTER SET utf8 */;
    use db3;
    CREATE TABLE `db3`.`tb1` (
      `c_id` INT NOT NULL AUTO_INCREMENT,
      `c_name` VARCHAR(45) NULL,
      `c_num` INT NULL,
      PRIMARY KEY (`c_id`));
    
    CREATE TABLE `tb2` (
      `c_id` int(11) NOT NULL AUTO_INCREMENT,
      `c_title` varchar(45) DEFAULT NULL,
      `c_balance` decimal(9,2) DEFAULT NULL,
      PRIMARY KEY (`c_id`)
    ) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;

    表tb1和表tb2之间是并列的,没有依赖关系,也没有一对一,一对多,多对多的关系。只是单纯的业务需求,用户点击搜索后既要搜索表tb1,也要搜索tb2。这种场景比较常见,比如说即要搜索相关的博客,又要搜索相关的帖子。把我们原来的db2文件夹复制粘贴并重新命名为db3。并且做以下修改。

    db-data-config.xml

    <dataConfig>
    
        <dataSource type="JdbcDataSource" 
                  driver="com.mysql.jdbc.Driver"
                  url="jdbc:mysql://127.0.0.1:3306/db1" 
                  user="root" 
                  encoding="UTF-8"
                  password="123456"/>
        <document>
            <entity name="e0" processor="SqlEntityProcessor" pk="id"
                query="SELECT c_id,c_name,c_num,concat('tb1_',c_id) tb1_id, concat(c_name,' ', c_num) zcq FROM db3.tb1">
                <field name="id" column="tb1_id" />  
                <field name="displayText" column="c_name" />
                <field name="zcq" column="zcq" />
            </entity>
            <entity name="e1" processor="SqlEntityProcessor" pk="id"
                query="SELECT c_id,c_title,c_balance,concat('tb2_',c_id) tb2_id, concat(c_title,' ',c_balance) zcq FROM db3.tb2">
                <field name="id" column="tb2_id" />  
                <field name="displayText" column="c_title" />  
                <field name="zcq" column="zcq" />
            </entity>
        </document>
    </dataConfig>
    

    managed-schema 前后代码省略。

    <field name="id" type="string" multiValued="false" indexed="true" required="true" stored="true"/>
      <field name="displayText" type="string" indexed="true" stored="true"/>
      <field name="zcq" type="string" indexed="true" stored="true"/>
      <field name="_version_" type="long" indexed="true" stored="true"/>

    solrconfig.xml mysql驱动的jar包路径也要改一下,前后代码省略:

    <lib dir="E:/blog/test1/solr-6.3.0/example/example-DIH/solr/db3/lib/" regex="mysql-connector-java-5.1.40.jar" />
  • 相关阅读:
    浅谈SQL Server事务与锁(上篇)
    浅谈缓存技术在ASP.NET中的运用
    浅谈ASP.NET框架
    浅谈Google Chrome浏览器(操作篇)(上)
    浅谈Google Chrome浏览器(理论篇)
    linux安装字体
    【tomcat系列】详解tomcat架构(上篇)
    【tomcat系列】配置tomcat远程访问
    从实战角度超级详解中大型企业微服务化的六大核心关键技术
    Idea Intellij 终生破解版
  • 原文地址:https://www.cnblogs.com/fengzhanfei/p/6372569.html
Copyright © 2011-2022 走看看