solrj数据请求流程

随手一记 2013-11-13

一、写流程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;
  }

相关推荐