方便自己查阅,记录于2019年8月20号。
关于solr 的多core查询,网上有很多,自己用到的也就下面这些。
项目需求,两张同样的表
如:
表1
id | name |
---|---|
1 | 张三 |
表2
id | name |
---|---|
2 | 张四 |
表3
id | name_id |
---|---|
1 | 1 |
1 | 2 |
通常来说sql语句是这样的:
select * from (
select * from 表1
union
select * from 表2) aa name_id in( select id from 表3)
solr 对应的语句是这样的
public static void queryMultiCore()throws Exception{
//查询a和b下面的数据,
HttpSolrClient sc = new HttpSolrClient("http://localhost:9090/standard");
String shards = "http://localhost:9090/standard,http://localhost:9090/fomaforumts";
ModifiableSolrParams solrParams = new ModifiableSolrParams();
solrParams.set("shards", shards);//设置shard
solrParams.set("q", "*:*");
//in:solr(1 3) 范围:[1 TO 3]
solrParams.set("fq", "{!join fromIndex=standard_system to=bznum from=bznum}id:[1 TO 3]");
QueryResponse rsp = sc.query(solrParams);
System.out.println("命中数量:"+rsp.getResults().getNumFound());
for(SolrDocument sd:rsp.getResults()){
System.out.println(sd);
}
sc.close();
}
其中要特别注意solr在join时候,关于条件的写法:sql中的in()对应的是{!join fromIndex=standard_system to=bznum from=bznum}id:(1 3); solr表示范围的是{!join fromIndex=standard_system to=bznum from=bznum}id:[1 TO 3],这个是我在网上查了半天终于找到的。
这里要感谢这位大神:https://www.jianshu.com/p/67c42c20ce6f