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请 ...
随机推荐
- DISC测试
您的测评结果 您的测评结果是:SC主导DISC图形 结果解读 这种典型行为风格,可被大致描述为是"调解者"的类型.这种类型的人通常生性和善,关注细节.他们关心别人,并在工作中一 ...
- nginx下js文件修改后访问不更新问题解决
今天遇到一个问题,nginx下js修改后不更新,加版本号,刷新浏览器缓存都不行,重启服务器才行,修改后又不更新了而且加载的js文件会有乱码或者文件加载不全的问题. 解决办法:修改nginx.conf, ...
- ubuntu 客户机安装VMware tools时出现编译错误,无法与主机共享文件(转)
主机:win7旗舰版 vmware workstation 10.0.7 (其他10.x版本也有这个问题) 客户机:Ubuntu14.04.4-16.x 安装vmware tools时出现下列编译错误 ...
- Zuul 限流
/** * 限流 */ @Component public class RateLimiterFilter extends ZuulFilter { //1秒钟100个令牌 private stati ...
- RedHat7.3创建本地yum源
[root@master ~]# mkdir -p /var/www/html 使用安装系统的ISO镜像文件rhel-server-7.3-x86_64-dvd.iso 把rhel-server-7. ...
- Python打包文件夹的方法小结(zip,tar,tar.gz等)
本文实例讲述了Python打包文件夹的方法.分享给大家供大家参考,具体如下: 一.zip ? 1 2 3 4 5 6 7 8 9 10 11 import os, zipfile #打包目录为zip文 ...
- Hiero扩展工具包开发小结
写了两个月,Hiero扩展工具包终于完成了,包括了7个扩展内容,从Tags的扩展到TranscodeImage任务的检查再到版本的搜索,还有新Token的创建,算是对Hiero原生程序做了一个补充,提 ...
- Azure 认知服务 (1) 概述
<Windows Azure Platform 系列文章目录> 在笔者之前的文章中,介绍的都是Azure Infrastructure-as-a-Service (IaaS) 和Plat ...
- sql 语句收集
SELECT type as 'plan cache store', buckets_count FROM sys.dm_os_memory_cache_hash_tables WHERE type ...
- xsd操作
1.xsd介绍 详见: http://blog.sina.com.cn/s/blog_ad0672d60102uy6w.html 2.生成xsd DataSet dataSet = new DataD ...