Search in sources :

Example 16 with ShardRequest

use of org.apache.solr.handler.component.ShardRequest in project lucene-solr by apache.

the class TopGroupsShardRequestFactory method createRequest.

private ShardRequest[] createRequest(ResponseBuilder rb, String[] shards) {
    ShardRequest sreq = new ShardRequest();
    sreq.shards = shards;
    sreq.purpose = ShardRequest.PURPOSE_GET_TOP_IDS;
    sreq.params = new ModifiableSolrParams(rb.req.getParams());
    // If group.format=simple group.offset doesn't make sense
    Grouping.Format responseFormat = rb.getGroupingSpec().getResponseFormat();
    if (responseFormat == Grouping.Format.simple || rb.getGroupingSpec().isMain()) {
        sreq.params.remove(GroupParams.GROUP_OFFSET);
    }
    sreq.params.remove(ShardParams.SHARDS);
    // results from the start.
    if (rb.shards_start > -1) {
        // if the client set shards.start set this explicitly
        sreq.params.set(CommonParams.START, rb.shards_start);
    } else {
        sreq.params.set(CommonParams.START, "0");
    }
    if (rb.shards_rows > -1) {
        // if the client set shards.rows set this explicitly
        sreq.params.set(CommonParams.ROWS, rb.shards_rows);
    } else {
        sreq.params.set(CommonParams.ROWS, rb.getSortSpec().getOffset() + rb.getSortSpec().getCount());
    }
    sreq.params.set(GroupParams.GROUP_DISTRIBUTED_SECOND, "true");
    final IndexSchema schema = rb.req.getSearcher().getSchema();
    for (Map.Entry<String, Collection<SearchGroup<BytesRef>>> entry : rb.mergedSearchGroups.entrySet()) {
        for (SearchGroup<BytesRef> searchGroup : entry.getValue()) {
            String groupValue;
            if (searchGroup.groupValue != null) {
                FieldType fieldType = schema.getField(entry.getKey()).getType();
                groupValue = fieldType.indexedToReadable(searchGroup.groupValue, new CharsRefBuilder()).toString();
            } else {
                groupValue = GROUP_NULL_VALUE;
            }
            sreq.params.add(GroupParams.GROUP_DISTRIBUTED_TOPGROUPS_PREFIX + entry.getKey(), groupValue);
        }
    }
    if ((rb.getFieldFlags() & SolrIndexSearcher.GET_SCORES) != 0 || rb.getSortSpec().includesScore()) {
        sreq.params.set(CommonParams.FL, schema.getUniqueKeyField().getName() + ",score");
    } else {
        sreq.params.set(CommonParams.FL, schema.getUniqueKeyField().getName());
    }
    int origTimeAllowed = sreq.params.getInt(CommonParams.TIME_ALLOWED, -1);
    if (origTimeAllowed > 0) {
        sreq.params.set(CommonParams.TIME_ALLOWED, Math.max(1, origTimeAllowed - rb.firstPhaseElapsedTime));
    }
    return new ShardRequest[] { sreq };
}
Also used : Grouping(org.apache.solr.search.Grouping) ModifiableSolrParams(org.apache.solr.common.params.ModifiableSolrParams) FieldType(org.apache.solr.schema.FieldType) Collection(java.util.Collection) ShardRequest(org.apache.solr.handler.component.ShardRequest) IndexSchema(org.apache.solr.schema.IndexSchema) CharsRefBuilder(org.apache.lucene.util.CharsRefBuilder) Map(java.util.Map) BytesRef(org.apache.lucene.util.BytesRef)

Aggregations

ShardRequest (org.apache.solr.handler.component.ShardRequest)16 ModifiableSolrParams (org.apache.solr.common.params.ModifiableSolrParams)13 ShardHandler (org.apache.solr.handler.component.ShardHandler)5 SolrException (org.apache.solr.common.SolrException)3 HashMap (java.util.HashMap)2 Map (java.util.Map)2 BytesRef (org.apache.lucene.util.BytesRef)2 NamedList (org.apache.solr.common.util.NamedList)2 ShardResponse (org.apache.solr.handler.component.ShardResponse)2 ConnectException (java.net.ConnectException)1 SocketException (java.net.SocketException)1 ArrayList (java.util.ArrayList)1 Collection (java.util.Collection)1 LinkedHashMap (java.util.LinkedHashMap)1 NoHttpResponseException (org.apache.http.NoHttpResponseException)1 ConnectTimeoutException (org.apache.http.conn.ConnectTimeoutException)1 CharsRefBuilder (org.apache.lucene.util.CharsRefBuilder)1 SolrServerException (org.apache.solr.client.solrj.SolrServerException)1 RemoteSolrException (org.apache.solr.client.solrj.impl.HttpSolrClient.RemoteSolrException)1 QueryResponse (org.apache.solr.client.solrj.response.QueryResponse)1