zoukankan      html  css  js  c++  java
  • 解决solr 请求参数过长报错too many boolean clauses Exception

    booleanClauses属性的意义

    貌似是查询条件有几个逻辑判断而不是参数长度。

    如下面两种情况

    a:1 OR b:2 AND C:3那么此时booleanClauses=3

    id(1 2 3 4 5) 那么此时booleanClauses=5

    当使用slor查询时,有时候我们的查询条件会非常多,由于solr的booleanquery默认设置的条件数为1024,所以超过这个限制的

    会报异常too many boolean clauses Exception,这样设置的原因是为了限制过多条件查询,降低查询的性能,但有时候又必须这样查,或分析数据用, 所以可以临时改变下,修改方法:

    1、  在solr的实例中有一个conf的文件solrconfig.xml文件中 在<query>的标签下有一个<maxBooleanClauses>1024</maxBooleanClauses>,单纯只修改这个1024,重启solr后并不会生效。

    原因:

    maxBooleanClauses属性是全局的lucene配置,当存在多个实例core时,只修改其中一个,当solr在加载的时候,只会取最后一个加载的core设置的maxBooleanClauses值。所以如果你的solr里面存在多个core,那么必须给每一个core都配置maxBooleanClauses。

    注:在solr最新版本中solrhome->solr.xml,全局设置中需要设置booleanClauses

    <int name="maxBooleanClauses">${solr.max.booleanClauses:1024}</int>

    这样全局变量设置与单个core设置应该就可以了,不需要全部core都修改了。

    2、  solr配置了最大请求参数之后post请求大小不够的话,还需要调整tomcat的post请求限制。

    即修改tomcat的conf/server.xml文件 

    <Connector connectionTimeout="20000" port="8088" protocol="HTTP/1.1" redirectPort="8443" maxPostSize="-1" maxHttpHeaderSize ="102400"/>

    maxPostSize与maxHttpHeaderSize的属性

    3、  代码把请求模式改成post模式,如

    QueryResponse qr = solr.query(this.getSolrQuery(ids));

    改成

    QueryResponse qr = solr.query(this.getSolrQuery(ids),METHOD.POST);

  • 相关阅读:
    Java(Android)线程池妙用
    Android Touch事件传递机制
    Spring Transaction属性之Propagation
    OpenSessionInViewFilter 的配置及作用(原文地址: http://blog.csdn.net/sunsea08/article/details/4545186)
    JAVA的Date类与Calendar类
    c3p0的几种使用方式(原文地址: https://my.oschina.net/liangtee/blog/101047)
    不知道是谁, 不过感觉好有道理的样子
    powerdesigenr设置主外键颜色
    sys系统用户长时间未登录导致密码过期
    easyui中自定义下拉框的使用
  • 原文地址:https://www.cnblogs.com/cuihongyu3503319/p/12018394.html
Copyright © 2011-2022 走看看