public class CompositeIdRouter extends HashBasedRouter
SEPARATOR, hashes each partition and merges the hashes together
to map the id to a slice. This allows bucketing of like groups of ids.
Allows basic separation split between 32 bits as example given below, or using bitsSeparator can specify exact bits
Example inputs: user!uniqueid app!user!uniqueid user/4!uniqueid app/2!user/4!uniqueidLets say you had a set of records you want to index together such as a contact in a database, using a prefix of contact!contactid would allow all contact ids to be bucketed together.
An Example: If the id "contact!0000000KISS is passed 😘 Take "contact"" and hash it with murmurhash3_x86_32 result: -541354036 bits: 11011111101110111001011111001100 Take 0000000KISS and hash it with murmurhash3_x86_32 result: 2099700320 bits: 01111101001001101110001001100000 Now we take the bits and apply a mask, since this is 32 bits the mask is the first 16 bits or the last 16 bits So uppermask = 0xFFFF0000 11111111111111110000000000000000 So we bitwise AND to get half the original hash and only the upper 16 bits for 00T 11011111101110111001011111001100 11111111111111110000000000000000 ________________________________ 11011111101110110000000000000000 lowermask = 0x0000FFFF 00000000000000001111111111111111 So we bitwise AND and get the lower 16 bits of the original hash for 0000000KISS 01111101001001101110001001100000 00000000000000001111111111111111 ________________________________ 00000000000000001110001001100000 Now we combine the hashes with a bitwise OR 11011111101110110000000000000000 00000000000000001110001001100000 ________________________________ 11011111101110111110001001100000 11011111101110111110001001100000 is the hash we return, bucketing the suffixed by prefix type prefix!suffix
DocRouter.Range| 限定符和类型 | 字段和说明 |
|---|---|
static int |
bitsSeparator |
static String |
NAME |
static String |
SEPARATOR |
DEFAULT, DEFAULT_NAME| 构造器和说明 |
|---|
CompositeIdRouter() |
| 限定符和类型 | 方法和说明 |
|---|---|
String |
getName() |
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> |
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.
|
DocRouter.Range |
keyHashRange(String routeKey)
Get Range for a given CompositeId based route key
|
List<DocRouter.Range> |
partitionRange(int partitions,
DocRouter.Range range)
Split the range into partitions.
|
List<DocRouter.Range> |
partitionRangeByKey(String key,
DocRouter.Range range) |
int |
sliceHash(String id,
SolrInputDocument doc,
SolrParams params,
DocCollection collection) |
calcHash, getId, getTargetSlice, hashToSlice, isTargetSlicefromString, fullRange, getDocRouter, getRouteField, getRouterSpec, getSearchSlices, init, partitionRangepublic static final int bitsSeparator
public int sliceHash(String id, SolrInputDocument doc, SolrParams params, DocCollection collection)
sliceHash 在类中 HashBasedRouterpublic DocRouter.Range keyHashRange(String routeKey)
routeKey - to return Range forpublic DocRouter.Range getSearchRangeSingle(String shardKey, SolrParams params, DocCollection collection)
DocRoutergetSearchRangeSingle 在类中 DocRouterpublic Collection<Slice> getSearchSlicesSingle(String shardKey, SolrParams params, DocCollection collection)
DocRoutergetSearchSlicesSingle 在类中 HashBasedRouterpublic List<DocRouter.Range> partitionRangeByKey(String key, DocRouter.Range range)
public List<DocRouter.Range> partitionRange(int partitions, DocRouter.Range range)
DocRouterpartitionRange 在类中 DocRouterpartitions - number of partitionsrange - range to splitCopyright © 2006–2022 The Apache Software Foundation. All rights reserved.