单机版的跨collection捣鼓了好久。
首先无论是单机版还是集群版,需要跨的collection的字段必须要一致。
首先尝试url的方式看是否可行:
这里有两个collection:collection1和collection2,两个都有id字段,collection1有tagComment字段,collection2中没有:
尝试查询tagComment这个collection1中有而collection2中没有的字段:
使用以下连接查询:
http://192.168.220.131:8080/solr/collection1/select?q=id:collection1_1&wt=json&indent=true&shards.info=true&shards=http://192.168.220.131:8080/solr/collection1,http://192.168.220.131:8080/solr/collection2
出错了,找不到tagComment,说明你查询条件的那个字段所在的数据中的字段,两个collection要一致。
那就这么来,在collection1和collection2中分别插入一条id为1的索引数据,字段不一致,我用id作为查询条件:
执行查询:
可以查询出来,但是每次刷新页面查询的结果是随机来自于collection1和collection2:
感觉没有得出想要的结论,换个方法尝试,在collection1和collection2中分别插入两条字段一致的索引数据,id不同,其他字段相同:
我查询titile:111title再来试试查询结果:
非常完美,查询出了4条数据,都查出来了!
很完美,但是我这里是id都不一样,那么在字段一致的情况下id一样会怎么样呢,因为在一个collection中id必须是唯一的:
于是又在collection1和collection2中分别增加了三条数据,其中orgId用来区分数据是来自collection1还是collection2:
查询结果,非常完美:
6条数据全部查询出来了,说明solr是支持跨collection查询的。那么跨collection的id相同的会怎么样呢,也就是不同collection的id可以一致吗:
在collecion2中新建了一条id与collection1一样的一条数据:
而在collection1中有这样一条数据,除了orgId不一样,其他的包括id所有的数据都一样:
再次执行查询:
刷新后这条数据:
最终得出了,如果返回的结果数据中出现两个collection中id重复,每次请求这条id重复的数据会随机来自某个collection,总的来说,就算是跨collection搜索,最好id不要重复。