1. Collection别名
简单理解,Collection 的别名是在solrColud云上的Collection做的又一层包装,可以用一个别名的Collection对应后台多个实际的Collection。
优点:
1、可以将实际的Collection和客户端程序分离开来,如果实际的collection改名了,只需要更改别名即可,不需要更改客户端程序。
2、可以简化跨越多个collection查询操作,一个别名Collection可以对应一个或多个后台实际的Collection。
用处:
举个例子:
假设我们需要保存一年的一个叫solr应用程序的日志,我们前台需要完成,除当月外前几个月日志搜索和当月日志搜索。
可以这样设计,一个月数据保存在一个Collection上,建立一个别名假设叫CollectionOld指向除当月外其他的月的Collection,
每当新建一个Collection的时候,我们就默默的更改别名多指向一个月的Collection;
新建另外一个叫CollectionNow的Collection指向当月的Collection,每次新建一个的时候就调整这两个匿名的Collection即可。
1、先用如下命令创建一个CollectionOld
/admin/collections?action=CREATEALIAS&name=CollectionOld&collections=solrCollection_201601,solrCollection_201602,solrCollection_201603
到了四月份新建一个solrCollection_201604
2、 新建一个Collection后执行命令:
1) /admin/collections?action=DELETEALIAS&name=CollectionOld 删除原来别名。
2)/admin/collections?action=CREATEALIAS&name=CollectionOld&collections=solrCollection_201601,solrCollection_201602,solrCollection_201603,solrCollection_201604 创建新的匿名。
通过以上方式设计好处:
1、可以将非当月的大量的不变的数据和当月小量的实时变动的数据分离开来,如果再配合前台的选项,一定程度上实现了
读写分离,在不变数据上做优化,将不会影响建索引的速度,而建索引同样不会影响到不变数据部分的查询性能。
2. 定制文档hash
我们知道,solr在添加文档建索引的时候,通过文档id来进行hash到具体哪一个shard上去,从而实现一个Collection上的数据平衡性。
但是这也有个弊端就是我们在做查询的时候,需要到每个shard并行查询,然后再将总结果返回,这一定程度上降低了性能。
solr支持一个特性就是我们可以通过特殊标记文档id,将这类文档都建立在特定的shard上,然后查询的时候只需要设置下一个参数
就可以支持直接到这个shard查询,从而提高了建索引的速度和查询速度。(带来的弊端就是一个Collection上的几个shard上的文档数量可能不均衡)
注意:这里的路由到特定的shard,但是没办法路由的具体的shard的,这个和直接路由的区别在此。
方法:就是文档id以 !分隔,前面可以为指定一个标示,后面为原来的文档id即可,如solr!doc123.
solr利用了!前面的16个bit做hash,又用了后面的16个bit做hash最终文档ID的hash是将两者组合起来。
查询:
由于你指定了文档的hash,那么在查询的时候如果需要快速查询则也需要特殊设置,方法就是查询时候添加参数:_route_=solr! 即可以直接查询到原来特定的shard上。
如果需要设置多个,可以用,号分隔。比如:_route_=solr!,squid!
用处:
1、对于一些速率要求高的,日志量又不大的,又必须和其他日志混在一个collection中存储的文档,可以通过这种方式来指定。