solr使用规范
0. 目的
规范solr设计、用法,避免bug,提高性能
1. 设计规范
- solr的用途是查询,不是存储,建议查询结果尽量都为id主键,而后再拿该id主键到缓存或者db中再查询相关信息,例如:请勿将经销商名称、车型名称等各类非Id信息放到solr。
- 索引字段只用来查询等价于sql中的where/group/join等字段,所以index都得为true,不需要展示的字段可以将store设置为false,以减小io及存储。
2. 开发规范
2.1 原则禁止模糊查询
优先考虑通过分词查询(线上solr默认支持ik分词)来满足需求。如果使用模糊查询,务必避免使用多个*,超过1个请通知我们,或许有更好的方案,并防止意外风险。原因为:过多的*会严重降低solr查询性能,由于lucene本身的问题,曾经导致线上solr实例内存溢出。
2.2 设置真实的rows或group.limit值
rows值建议根据实际情况设置,例如:查询结果最多100条,rows没必要设置为1000,禁止使用int.maxvalue之类的设置,建议业务方根据自己的业务场景,估计是最大值;当rows>2000,请做好压力测试,并通知我们。
group.limit同理。
原因: 同禁止模糊查询
2.3 页码过大时,请慎重
分页值如果比较大,例如1000万条数据,每页10条,随着pageIndex值的增大,solr查询性能会逐步降低,如果pageIndex非常大,例如超过1万,性能会比较慢。可以和产品商量,1)大于某个阀值的时候,考虑设置为一个随机数;2)设置最大的页码,例如:1000页,防止抓包工具恶意扫描。
2.4 确保HttpSolrClient/HttpSolrServer单例
源码:
params.set(HttpClientUtil.PROP_MAX_CONNECTIONS, 128); params.set(HttpClientUtil.PROP_MAX_CONNECTIONS_PER_HOST, 32); params.set(HttpClientUtil.PROP_FOLLOW_REDIRECTS, followRedirects);
通过上述代码表明一个HttpSolrClient/HttpSolrServer占用多个tcp连接,如果不是单例,则连接数会倍增,线上虚拟机出现过占用链接过多导致资源不够用的OOM。
2.5 solr 随机排序
solr支持,用法如下:
# schema配置 <dynamicField name="rand*" type="random" indexed="true" stored="false"/> # solrj查询语法 query.addSort("rand_"+randomNum, ORDER.desc);//随机排序
相关推荐
spylyt 2020-09-11
upxiaofeng 2020-06-11
TyCoding 2020-05-03
upxiaofeng 2020-04-30
lionelf 2020-04-20
TyCoding 2020-04-08
TyCoding 2020-03-26
wenchanter 2020-03-26
roygbip 2020-02-16
wsxsxz 2020-02-03
lionelf 2020-02-03
lionelf 2020-02-03
TyCoding 2020-02-01
heniancheng 2020-01-31
lionelf 2020-01-30
TyCoding 2020-01-10