一张表里查询多个字段
在 前一篇教程里面,我们加了个db2内核。如果用户在系统里面的搜索框内输入一段文字,这段文字即可能是书名,也有可能是书的ISBN号,那么我们应该怎么做呢?
找到 solr目录/example/example-DIH/solr/db2/conf/ 文件夹。打开 db-data-config.xml 文件。找到entity标签,更改query属性里面的SQL语句。利用MySQL的concat函数拼接一下两个字段的内容,并为这个新的返回列分配一个新的field。修改后的代码如下:
driver="com.mysql.jdbc.Driver"
url="jdbc:mysql://127.0.0.1:3306/db1"
user="test_user"
encoding="UTF-8"
password="123456"/>
query="select c_id,c_name,c_isbn,concat(c_name,' ',c_isbn) zcq from t_book">
zcq就是我们新加的两字段一块查询的属性。
同时,我们要修改 managed-schema 文件。找到我们在 前一篇教程 里面加入的field标签,在其中再加入一个新的zcq标签。加完后的代码如下,仅仅显示关键代码:
重启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
driver="com.mysql.jdbc.Driver"
url="jdbc:mysql://127.0.0.1:3306/db1"
user="root"
encoding="UTF-8"
password="123456"/>
query="SELECT c_id,c_name,c_num,concat('tb1_',c_id) tb1_id, concat(c_name,' ', c_num) zcq FROM db3.tb1">
query="SELECT c_id,c_title,c_balance,concat('tb2_',c_id) tb2_id, concat(c_title,' ',c_balance) zcq FROM db3.tb2">
managed-schema 前后代码省略。
solrconfig.xml mysql驱动的jar包路径也要改一下,前后代码省略: