2

伙计们,首先,我向您展示 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>

4

0 回答 0