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

solr 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" />


转载请注明:谷谷点程序 » solr mysql 一张表里查询多个字段,多张并列关系的表查找数据