solrj数据请求流程
一、写流程add
1、SolrServer的add方法:创建UpdateRequest对象,UpdateRequest.add(docList)。然后调用UpdateRequest.process(SolrServer)方法。
2、UpdateRequest.process():调用SolrServer(一般是HttpSolrServer)的request方法 (这里设置了ElaspedTime的开始时间)。
3、HttpSolrServer.request(SolrRequest request): 创建HttpPost,并获得request中的ContentStream(即把request中的documents变成<add><doc><field boost="1.0">XXX</field></doc>....</add>的形式) 。然后把ContentStream.getStream()将字符串变成字节流(new ByteArrayInputStream( str.getBytes(DEFAULT_CHARSET) ))放到post请求中,通过httpClient发送给solr服务器。
4、获得solr服务器的响应后的结果是字节流,需要使用ResponseParser(默认是BinaryResponseParser)对结果的字节流进行解析成相应的字符串,并放到UpdateResponse中,并设置response的ElaspedTime。
二、query流程
1、SolrServer的query方法:创建QueryRequest对象, QueryRequest(QueryParam)。然后调用QueryRequest.process(SolrServer)方法。
2、QueryRequest.process(SolrServer):调用SolrServer(一般是HttpSolrServer)的request方法
3、HttpSolrServer.request(SolrRequest request): 创建HttpGet。
4、获得solr服务器的响应后的结果是字节流,需要使用ResponseParser(默认是BinaryResponseParser)对结果的字节流进行解析成相应的字符串,并放到QueryResponse中。
//QueryResponse构造: public QueryResponse( NamedList<Object> res , SolrServer solrServer){ this.setResponse( res ); this.solrServer = solrServer; }