solr 请求参数过长报错,Solr配置maxBooleanClauses属性不生效原因分析
博客分类:
上次已经写过一篇关于solr中,查询条件过多的异常的文章,这次在总结扩展一下:
有时候我们的查询条件会非常多,由于solr的booleanquery默认设置的条件数为1024,所以超过这个限制的
会报异常,这样设置的原因是为了限制过多条件查询,降低查询的性能,但有时候又必须这样查,或分析数据用,
所以可以临时改变下,修改方法:
修改solrconfig.xml文件:
伦理片 http://www.dotdy.com/
- <maxBooleanClauses>20000</maxBooleanClauses>
理想情况下,配置完这个属性,重启应该就生效了,但是让你意外的是,并没有生效,拼接5000个查询条件,依然报这个异常:
- too many boolean clauses Exception
为什么? 仔细看solr的文档里面,写这下面一段话:
- 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/
最后在补充一些查询知识:
- //过滤的几种写法
- (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
在solr请求的参数中,我们一般情况下是不会有太多的参数,有一种情况会有很多,就是有关联关系的时候,查出来了一个ids的集合,然后传给你的solr当参数,这个时候,你的参数就可能会报长度错误。如果没有报,那只能说明你的长度还不够长。
接下来介绍如何解决长度问题。
1.在solr的实例中有一个conf的文件solrconfig.xml文件中 在<query>的标签下有一个<maxBooleanClauses>1024</maxBooleanClauses>这个时候,你修改这个1024就可以,有些人修改完事了,重启了solr但是没有起效,原因:实例core有多个,但是你只修改了这一个,当solr在加载的时候,只会按照最后一个设置的值做标准。它的标准是最后加载的一个core实例的maxBooleanClauses值。(当你修改这个配置的时候,自己读一下修改位置上面被注释掉的文字)
2.(这个是第二天来补充的,不和上面是一起写的),虽然你的solr配置没问题,但是你的tomcat并不能接收那么多的参数,所以需要修改tomcat的conf/server.xml文件 <Connector connectionTimeout="20000" port="8088" protocol="HTTP/1.1" redirectPort="8443" maxHttpHeaderSize=""/> maxHttpHeaderSize的属性就是请求头的大小设置。
把请求模式改成post模式, QueryResponse qr = solr.query(this.getSolrQuery(ids));改成
QueryResponse qr = solr.query(this.getSolrQuery(ids),METHOD.POST);
总结:
(1)如果是or操作多个条件,只能配置最大限制条件
(2)如果是and操作多个条件,可以上面的3方法,而不用配置最大限制条件
solr 请求参数过长报错,Solr配置maxBooleanClauses属性不生效原因分析的更多相关文章
- 解决solr 请求参数过长报错too many boolean clauses Exception
booleanClauses属性的意义 貌似是查询条件有几个逻辑判断而不是参数长度. 如下面两种情况 a:1 OR b:2 AND C:3那么此时booleanClauses=3 id(1 2 3 4 ...
- mybatis从dao传入多个参数到sqlmap时dao中要使用map或实例对象(如:user)作为参数传入, 否则报错找不到属性getter方法
23:37 2015-07-02 注意1. 使用mybaits的resultMap查询时, 如果想传入多个参数(比如where 1=1动态多条件查询时)sqlmap文件中对应的方法中, selectL ...
- Spring Cloud Gateway 动态修改请求参数解决 # URL 编码错误传参问题
Spring Cloud Gateway 动态修改请求参数解决 # URL 编码错误传参问题 继实现动态修改请求 Body 以及重试带 Body 的请求之后,我们又遇到了一个小问题.最近很多接口,收到 ...
- Ajax请求参数较长导致请求失败
Ajax请求参数比较长,第5行参数大概1100个字符吧,是接口的请求报文. $.ajax({ type:"POST", url:"${ctx}/test.action?m ...
- idea中 参数没有描述报错 @param XX tag description is missing错误,去除黄色警告
最近在使用idea开发工具,在方法备注中参数没有描述报错就会报一些黄色警告: @param XX tag description is missing,下面展示去除黄色警告的方法 File--sett ...
- EF执行存储工程报错 String[4]: Size 属性具有无效大小值 0。
EF中执行存储过程报错 String[4]: Size 属性具有无效大小值 0 排查后是如下问题所致,给定的参数没有设定大小(加入红框内的就可以了) private string GetCode(MC ...
- selenium+phantomjs报错:Unable to find a free port的分析和解决
selenium+phantomjs报错:Unable to find a free port的分析和解决 Table of Contents 1. 现象 2. 分析 3. 解决办法 1 现象 在做项 ...
- 【原创】IBM Websphere 报错:JSPG0120E: 为 pageEncoding 属性和匹配 URI 模式的配置元素指定不同的值是非法的。
websphere中间件,在打开一个jsp页面时报: IBM Websphere 报错:JSPG0120E: 为 pageEncoding 属性和匹配 URI 模式的配置元素指定不同的值是非法的. . ...
- excel导出使用get请求参数过长问题
遇到的问题: excel导出功能时,使用的是window.location.href=url也就是get请求.当传入参数过长的时候就报了414,地址过长的错误. 解决思路: 将get请求换为post请 ...
随机推荐
- [转]HashMap的实现原理
1. HashMap概述: HashMap是基于哈希表的Map接口的非同步实现.此实现提供所有可选的映射操作,并允许使用null值和null键.此类不保证映射的顺序,特别是它不保证该顺序恒久不变 ...
- pri 知识点
pri github:https://github.com/prijs/pri 添加路由后动态导入,使用的是 react-loadable:https://github.com/jamiebuilds ...
- git merge 和 git merge --no-ff
根据这张图片可以看出 git merge –no-ff 可以保存你之前的分支历史.能够更好的查看 merge历史,以及branch 状态. git merge 则不会显示 feature,只保留单条分 ...
- django配置setting文件
添加app到INSTALLED_APPS列表中 INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.co ...
- Android Monkey测试入门
第一步:搭建环境:主要是安装和搭建java和sdk环境,说白了,对我们安卓开发来说,只要搭建好了Android开发环境,Monkey测试环境基本就是OK的了.可以参考:http://www.cnblo ...
- py-day1-6 python 5个灰魔法 【len,index索引,for循环,切片】
# 索引,下标,获取字符串中的某一个字符. test = 'MuMingJun' v = test[3] print(v) i # 切片 test = 'MuMingJun' v = test[0:- ...
- CSS 仿 iOS 系统通知数字样式
/** 仿 iOS 系统通知数字样式 **/ .num_span{ background-color: #f00; background-image: -webkit-linear-gradient( ...
- 信号滤波模块verilog代码---UNLOCK,LOCK状态机方式
信号滤波模块verilog代码 `timescale 1ns / 1ps /////////////////////////////////////////////////////////////// ...
- Linux/Centos下安装部署phantomjs 及使用
PhantomJS 是一个基于 WebKit 的服务器端 JavaScript API.它全面支持web而不需浏览器支持,其快速,原生支持各种Web标准: DOM 处理, CSS 选择器, JSON, ...
- [蓝桥杯]ALGO-90.算法训练_出现次数最多的整数
问题描述 编写一个程序,读入一组整数,这组整数是按照从小到大的顺序排列的,它们的个数N也是由用户输入的,最多不会超过20.然后程序将对这个数组进行统计,把出现次数最多的那个数组元素值打印出来.如果有两 ...