solr mysql 子查询条件_solr mysql 一张表里查询多个字段,多张并列关系的表查找数据...

一张表里查询多个字段

在 前一篇教程里面,我们加了个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包路径也要改一下,前后代码省略:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值