博客分类:
上次已经写过一篇关于solr中,查询条件过多的异常的文章,这次在总结扩展一下:
有时候我们的查询条件会非常多,由于solr的booleanquery默认设置的条件数为1024,所以超过这个限制的
会报异常,这样设置的原因是为了限制过多条件查询,降低查询的性能,但有时候又必须这样查,或分析数据用,
所以可以临时改变下,修改方法:
修改solrconfig.xml文件:
伦理片 http://www.dotdy.com/
Java代码
- <maxBooleanClauses>20000</maxBooleanClauses>
理想情况下,配置完这个属性,重启应该就生效了,但是让你意外的是,并没有生效,拼接5000个查询条件,依然报这个异常:
Java代码
- too many boolean clauses Exception
为什么? 仔细看solr的文档里面,写这下面一段话:
Java代码
- Max Boolean Clauses
- Maximum number of clauses in each BooleanQuery, an exception
- is thrown if exceeded.
- ** WARNING **
- This option actually modifies a global Lucene property that
- will affect all SolrCores. If multiple solrconfig.xml files
- disagree on this property, the value at any given moment will
- be based on the last SolrCore to be initialized.
什么意思?大致就是说,这个属性是全局的lucene配置,如果你的solr里面存在多个core,那么必须多个core的配置
文件都得配置maxBooleanClauses才会生效,否则只有当你配置的那个core最后一个被加载时,它才会生效,如果不幸,不是最后一个加载,那么即使你设置成20000那么它默认还是1024,这就是为什么配置完成之后依旧不生效的原因,散仙的场景中,参数大概有8000多个,虽然改变配置可以查询,但不建议这么用,内存不给力的情况下,查询速度非常之慢,用于离线分析某些数据,倒还可以接受。
影音先锋电影 http://www.iskdy.com/
最后在补充一些查询知识:
Java代码
- //过滤的几种写法
- (1)q=category:1 AND category:2 AND category:3 ... AND category:2000
- (2)q=*:*&fq=category:(1 2 3 ... 2000)
- (3)q=*:*&fq=category:1&fq=category:2&fq=category:3&....&fq=category:2000
总结:
(1)如果是or操作多个条件,只能配置最大限制条件
(2)如果是and操作多个条件,可以上面的3方法,而不用配置最大限制条件