Package org.apache.solr.common.cloud

## Class DocRouter

- java.lang.Object
- - org.apache.solr.common.cloud.DocRouter

Direct Known Subclasses:
  `HashBasedRouter`, `ImplicitDocRouter`

    public abstract class DocRouter
    extends Object

Class to partition int range into n ranges.

WARNING: This API is experimental and might change in incompatible ways in the next release.

### Nested Class Summary

Nested Classes
`static class` `DocRouter.Range`

### Field Summary

Fields
`static DocRouter` `DEFAULT`
`static String` `DEFAULT_NAME`

### Constructor Summary

Constructors
`DocRouter()`

### Method Summary

All Methods Static Methods Instance Methods Abstract Methods Concrete Methods
`DocRouter.Range` `fromString​(String range)`
`DocRouter.Range` `fullRange()`
`static DocRouter` `getDocRouter​(String routerName)`
`abstract String` `getName()`
`String` `getRouteField​(DocCollection coll)`
`static Map<String,​Object>` `getRouterSpec​(ZkNodeProps props)`
`DocRouter.Range` `getSearchRangeSingle​(String shardKey, SolrParams params, DocCollection collection)` This method is consulted to determine what search range (the part of the hash ring) should be queried for a request when an explicit shards' parameter was not used.
`Collection<Slice>` `getSearchSlices​(String shardKeys, SolrParams params, DocCollection collection)` This method is consulted to determine what slices should be queried for a request when an explicit shards' parameter was not used.
`abstract Collection<Slice>` `getSearchSlicesSingle​(String shardKey, SolrParams params, DocCollection collection)` This method is consulted to determine what slices should be queried for a request when an explicit shards' parameter was not used.
`abstract Slice` `getTargetSlice​(String id, SolrInputDocument sdoc, String route, SolrParams params, DocCollection collection)` Returns the Slice that the document should reside on, or null if there is not enough information
`abstract boolean` `isTargetSlice​(String id, SolrInputDocument sdoc, SolrParams params, String shardId, DocCollection collection)`
`List<DocRouter.Range>` `partitionRange​(int partitions, DocRouter.Range range)` Split the range into partitions.
`List<DocRouter.Range>` `partitionRange​(int partitions, DocRouter.Range range, float fuzz)` Split the range into partitions with inexact sizes.

### Methods inherited from class java.lang.Object

`clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

### Field Detail

#### DEFAULT_NAME

    public static final String DEFAULT_NAME

See Also:
  Constant Field Values

#### DEFAULT

    public static final DocRouter DEFAULT

### Constructor Detail

#### DocRouter

    public DocRouter()

### Method Detail

#### getDocRouter

    public static DocRouter getDocRouter​(String routerName)

#### getRouteField

    public String getRouteField​(DocCollection coll)

#### getRouterSpec

    public static Map<String,​Object> getRouterSpec​(ZkNodeProps props)

#### fromString

    public DocRouter.Range fromString​(String range)

#### fullRange

    public DocRouter.Range fullRange()

#### partitionRange

    public List<DocRouter.Range> partitionRange​(int partitions,
                                                DocRouter.Range range)

Split the range into partitions.

Parameters:
  `partitions` - number of partitions
  `range` - range to split

#### partitionRange

    public List<DocRouter.Range> partitionRange​(int partitions,
                                                DocRouter.Range range,
                                                float fuzz)

Split the range into partitions with inexact sizes.

Parameters:
  `partitions` - number of partitions
  `range` - range to split
  `fuzz` - value between 0 (inclusive) and 0.5 (exclusive) indicating inexact split, i.e. percentage of variation in resulting ranges - odd ranges will be larger and even ranges will be smaller by up to that percentage.

#### getTargetSlice

    public abstract Slice getTargetSlice​(String id,
                                         SolrInputDocument sdoc,
                                         String route,
                                         SolrParams params,
                                         DocCollection collection)

Returns the Slice that the document should reside on, or null if there is not enough information

#### getSearchSlicesSingle

    public abstract Collection<Slice> getSearchSlicesSingle​(String shardKey,
                                                            SolrParams params,
                                                            DocCollection collection)

This method is consulted to determine what slices should be queried for a request when an explicit shards' parameter was not used. This method only accepts a single shard key (or null). If you have a comma separated list of shard keys, call getSearchSlices

#### getSearchRangeSingle

    public DocRouter.Range getSearchRangeSingle​(String shardKey,
                                                SolrParams params,
                                                DocCollection collection)

This method is consulted to determine what search range (the part of the hash ring) should be queried for a request when an explicit shards' parameter was not used. This method only accepts a single shard key (or null).

#### isTargetSlice

    public abstract boolean isTargetSlice​(String id,
                                          SolrInputDocument sdoc,
                                          SolrParams params,
                                          String shardId,
                                          DocCollection collection)

#### getName

    public abstract String getName()

#### getSearchSlices

    public Collection<Slice> getSearchSlices​(String shardKeys,
                                             SolrParams params,
                                             DocCollection collection)

This method is consulted to determine what slices should be queried for a request when an explicit shards' parameter was not used. This method accepts a multi-valued shardKeys parameter (normally comma separated from the shard.keys request parameter) and aggregates the slices returned by getSearchSlicesSingle for each shardKey.