org.apache.solr.client.solrj.io.stream

## Class HashJoinStream

- java.lang.Object
- - org.apache.solr.client.solrj.io.stream.TupleStream
  - - org.apache.solr.client.solrj.io.stream.HashJoinStream

All Implemented Interfaces:
  Closeable, Serializable, AutoCloseable, Expressible, MapSerializable, MapWriter, NavigableObject

Direct Known Subclasses:
  OuterHashJoinStream

    public class HashJoinStream
    extends TupleStream
    implements Expressible

Takes two streams (fullStream and hashStream) and joins them similar to an InnerJoinStream. The difference in a HashJoinStream is that the tuples in the hashStream will all be read and hashed when this stream is opened. This provides a few optimizations iff the hashStream has a relatively small number of documents. You are expected to provide a set of fields for which the hash will be calculated from. If a tuple does not contain a value (ie, null) for one of the fields the hash is being computed on then that tuple will not be considered a match to anything. Ie, all fields which are part of the hash must have a non-null value.

Since:
  6.0.0
See Also:
  Serialized Form

### Nested Class Summary

### Nested classes/interfaces inherited from class org.apache.solr.client.solrj.io.stream.TupleStream

`TupleStream.IgnoreException`

### Nested classes/interfaces inherited from interface org.apache.solr.common.MapWriter

`MapWriter.EntryWriter`

### Field Summary

Fields
`protected TupleStream` `fullStream`
`protected HashMap<String,List<Tuple>>` `hashedTuples`
`protected TupleStream` `hashStream`
`protected List<String>` `leftHashOn`
`protected List<String>` `rightHashOn`
`protected String` `workingFullHash`
`protected Tuple` `workingFullTuple`
`protected int` `workngHashSetIdx`

### Constructor Summary

Constructors
Constructor and Description
`HashJoinStream(StreamExpression expression, StreamFactory factory)`
`HashJoinStream(TupleStream fullStream, TupleStream hashStream, List<String> hashOn)`

### Method Summary

All Methods Instance Methods Concrete Methods
`List<TupleStream>` `children()`
`void` `close()`
`protected String` `computeHash(Tuple tuple, List<String> hashOn)`
`int` `getCost()`
`StreamComparator` `getStreamSort()`
`void` `open()`
`Tuple` `read()`
`void` `setStreamContext(StreamContext context)`
`Explanation` `toExplanation(StreamFactory factory)` Returns an explanation about the stream object
`StreamExpression` `toExpression(StreamFactory factory)`

### Methods inherited from class org.apache.solr.client.solrj.io.stream.TupleStream

`getShards, getShards, getStreamNodeId, writeMap`

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

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

### Methods inherited from interface org.apache.solr.common.MapWriter

`jsonStr, toMap`

### Methods inherited from interface org.apache.solr.common.NavigableObject

`_forEachEntry, _forEachEntry, _forEachEntry, _get, _get, _getStr, _getStr`

### Field Detail

#### hashStream

    protected TupleStream hashStream

#### fullStream

    protected TupleStream fullStream

#### leftHashOn

    protected List<String> leftHashOn

#### rightHashOn

    protected List<String> rightHashOn

#### hashedTuples

    protected HashMap<String,List<Tuple>> hashedTuples

#### workingFullTuple

    protected Tuple workingFullTuple

#### workingFullHash

    protected String workingFullHash

#### workngHashSetIdx

    protected int workngHashSetIdx

### Constructor Detail

#### HashJoinStream

    public HashJoinStream(TupleStream fullStream,
                          TupleStream hashStream,
                          List<String> hashOn)
                   throws IOException

Throws:
  `IOException`

#### HashJoinStream

    public HashJoinStream(StreamExpression expression,
                          StreamFactory factory)
                   throws IOException

Throws:
  `IOException`

### Method Detail

#### toExpression

    public StreamExpression toExpression(StreamFactory factory)
                                  throws IOException

Specified by:
  `toExpression` in interface `Expressible`
Throws:
  `IOException`

#### toExplanation

    public Explanation toExplanation(StreamFactory factory)
                              throws IOException

Description copied from interface: `Expressible`
Returns an explanation about the stream object

Specified by:
  `toExplanation` in interface `Expressible`
Specified by:
  `toExplanation` in class `TupleStream`
Parameters:
  `factory` - Stream factory for this, contains information about the function name
Returns:
  Explanation about this stream object containing explanations of any child stream objects
Throws:
  `IOException` - throw on any error

#### setStreamContext

    public void setStreamContext(StreamContext context)

Specified by:
  `setStreamContext` in class `TupleStream`

#### children

    public List<TupleStream> children()

Specified by:
  `children` in class `TupleStream`

#### open

    public void open()
              throws IOException

Specified by:
  `open` in class `TupleStream`
Throws:
  `IOException`

#### computeHash

    protected String computeHash(Tuple tuple,
                                 List<String> hashOn)

#### close

    public void close()
               throws IOException

Specified by:
  `close` in interface `Closeable`
Specified by:
  `close` in interface `AutoCloseable`
Specified by:
  `close` in class `TupleStream`
Throws:
  `IOException`

#### read

    public Tuple read()
               throws IOException

Specified by:
  `read` in class `TupleStream`
Throws:
  `IOException`

#### getStreamSort

    public StreamComparator getStreamSort()

Specified by:
  `getStreamSort` in class `TupleStream`

#### getCost

    public int getCost()

Overrides:
  `getCost` in class `TupleStream`