Slor 条件查询提示:org.apache.http.ParseException: Invalid content type:

Posted 在奋斗的大道

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Slor 条件查询提示:org.apache.http.ParseException: Invalid content type:相关的知识,希望对你有一定的参考价值。

今天在编写Solr查询条件时,启动单元测试,solr 提示如下错误信息:

Caused by: org.apache.http.ParseException: Invalid content type: 
    at org.apache.http.entity.ContentType.parse(ContentType.java:233)
    at org.apache.solr.client.solrj.impl.HttpSolrServer.executeMethod(HttpSolrServer.java:496)
    at org.apache.solr.client.solrj.impl.HttpSolrServer.request(HttpSolrServer.java:210)
    at org.apache.solr.client.solrj.impl.HttpSolrServer.request(HttpSolrServer.java:206)
    at org.apache.solr.client.solrj.request.QueryRequest.process(QueryRequest.java:91)
    ... 90 more

报错代码片段:

SolrQuery query = new SolrQuery();

this.setQuery(query, localParam);

// solr请求
QueryResponse queryResponse = server.query(query);
public void setQuery(SolrQuery query, Map<String, Object> parameter){
		String text = (String) parameter.get("text");
		String type = (String) parameter.get("type");
		if(StringUtils.isEmpty(text)){
			// 默认查询全部
			query.setQuery("*:*");
		} else {
			if(StringUtils.isEmpty(type)){
				// 默认查询:text 字段
				query.setQuery("text:" +"*".concat(text).concat("*"));
			} else {
				StringBuilder builder = new StringBuilder();
				if("certificate".equalsIgnoreCase(type)){
					builder.append("205designNo:" + "*".concat(text).concat("*")).append(" or ");
					builder.append("205approvalNo:" + "*".concat(text).concat("*")).append(" or ");
					builder.append("205landLicenseNo:" + "*".concat(text).concat("*")).append(" or ");
					builder.append("205devUsePlanningNo:" + "*".concat(text).concat("*")).append(" or ");
					builder.append("206planningVerCertificate:" + "*".concat(text).concat("*")).append(" or ");
					builder.append("206trafficPlanningOpinionsNo:" + "*".concat(text).concat("*")).append(" or ");
					builder.append("209consLandPlanningLicense:" + "*".concat(text).concat("*")).append(" or ");
					builder.append("211engPlanningNo:" + "*".concat(text).concat("*")).append(" or ");
					builder.append("211planningOpinionRecordNo:" + "*".concat(text).concat("*")).append(" or ");
					builder.append("504consLandPlanningLicense:" + "*".concat(text).concat("*")).append(" or ");
					builder.append("504landApproveNo:" + "*".concat(text).concat("*")).append(" or ");
					builder.append("504landReserveNo:" + "*".concat(text).concat("*")).append(" or ");
					builder.append("504landParcel:" + "*".concat(text).concat("*"));
					
					query.setQuery(builder.toString());
					
				} else if("unit".equalsIgnoreCase(type)){
					builder.append("205devOrgName:" + "*".concat(text).concat("*")).append(" or ");
					builder.append("205designOrgName:" + "*".concat(text).concat("*")).append(" or ");
					builder.append("205designOrgPerson:" + "*".concat(text).concat("*")).append(" or ");
					builder.append("206unitName:" + "*".concat(text).concat("*")).append(" or ");
					builder.append("211applyName:" + "*".concat(text).concat("*")).append(" or ");
					builder.append("211designOrgName:" + "*".concat(text).concat("*")).append(" or ");
					builder.append("211unitName:" + "*".concat(text).concat("*")).append(" or ");
					builder.append("504landUseUnit:" + "*".concat(text).concat("*")).append(" or ");
					builder.append("226punisherName:" + "*".concat(text).concat("*")).append(" or ");
					builder.append("226companyName:" + "*".concat(text).concat("*")).append(" or ");
					builder.append("226client:" + "*".concat(text).concat("*")).append(" or ");
					builder.append("226clientUnit:" + "*".concat(text).concat("*"));
					
					query.setQuery(builder.toString());
					
				} else if("title".equalsIgnoreCase(type)){
					builder.append("archTitle:" + "*".concat(text).concat("*"));
					query.setQuery(builder.toString());
				}
			}
		}
	}

造成问题原因:GET向solr传递参数的时候参数过长导致的。

解决办法一: GET请求替换为POST 请求

修改后的代码:

SolrQuery query = new SolrQuery();

this.setQuery(query, localParam);

// solr请求
QueryResponse queryResponse = server.query(query, METHOD.POST);

解决办法二:修改solr配置

配置文件位置:SOLRHOME/CORE_NAME/conf/solrconfig.xml

找到如下配置:

<maxBooleanClauses>1024</maxBooleanClauses>

1024 改为10240

其中,SOLRHOME为你的solr主目录,CORENAME为你的core的名称

 

以上是关于Slor 条件查询提示:org.apache.http.ParseException: Invalid content type:的主要内容,如果未能解决你的问题,请参考以下文章

spring-data-slor 通配符的匹配很全面, 但无法找到元素 'solr:solr-server' 的声明。

SQL查询中IN语句条件为一个数组如何进行查询?(ASP提示类型不匹配)

access 模糊查询 条件 like

oracle 嵌套查询 子查询 自连接 等值连接条件

仅在满足条件时使用提示

ElementUI多重条件嵌套条件查询