伙计们,首先,我向您展示 applicationContext.xml 中有关集成 HttpServer 的部分。我从 solr.properties 中读取了 contrucotr 参数。
<!-- solr configuration-->
<bean id="solrHttpServer" class="com.augmentum.ksp.solr.server.SolrHttpServer" scope="prototype">
<constructor-arg value="${solr.url}" />
<constructor-arg value="${solr.socketTimeOut}" />
<constructor-arg value="${solr.connTimeOut}" />
<constructor-arg value="${solr.maxConnDefault}" />
<constructor-arg value="${solr.maxConnTotal}" />
<constructor-arg value="${solr.maxRetries}" />
<constructor-arg value="${solr.allowCompression}" />
<constructor-arg value="${solr.followRedirects}" />
</bean>
以下是我们在DAO层的查询方法,我们在服务层有很多方法同时使用“queryCount”方法。
@Repository
public class SolrBaseDaoImpl implements SolrBaseDao {
@Autowired
private SolrHttpServer solrHttpServer;
@Override
public synchronized int queryCount(String coreName, String queryExpression, Set<String> filterQuerys)
throws SolrServerException, IOException {
if (null == queryExpression || "".equals(queryExpression)) {
return 0;
}
String baseUrl = SolrUtil.getSolrBaseURL(solrHttpServer.getBaseURL());
solrHttpServer.setBaseURL(baseUrl + "/" + coreName);
SolrQuery query = new SolrQuery();
query.setQuery(queryExpression);
// set filter query
if (null != filterQuerys) {
for (String fq : filterQuerys) {
query.addFilterQuery(fq);
}
}
query.setStart(0);
query.setRows(Integer.MAX_VALUE);
QueryResponse rsp = solrHttpServer.query(query);
return rsp.getResults().size();
}
}
因此,出现了问题。报告“SolrRemoteException:undefined field *”。我们认为错误的根源是有很多请求同时访问“queryCount”方法**,因此我们在该方法中添加了一个“同步”装饰器,这样问题神经就不再发生了。但是,众所周知,当有很多请求时,逐个访问方法,执行速度非常慢。太糟糕了!你能告诉我你对这个问题的看法吗?或者错误不是线程同步引起的?</p>