## org.apache.lucene.search.join
Class BlockJoinQuery

    java.lang.Object
      org.apache.lucene.search.Query
          org.apache.lucene.search.join.BlockJoinQuery

All Implemented Interfaces:
  Serializable, Cloneable

    public class BlockJoinQuery

extends Query

This query requires that you index children and parent docs as a single block, using the `IndexWriter.addDocuments(java.util.Collection<org.apache.lucene.document.Document>)` or `IndexWriter.updateDocuments(org.apache.lucene.index.Term, java.util.Collection<org.apache.lucene.document.Document>)` API. In each block, the child documents must appear first, ending with the parent document. At search time you provide a Filter identifying the parents, however this Filter must provide an `FixedBitSet` per sub-reader.

Once the block index is built, use this query to wrap any sub-query matching only child docs and join matches in that child document space up to the parent document space. You can then use this Query as a clause with other queries in the parent document space.

The child documents must be orthogonal to the parent documents: the wrapped child query must never return a parent document.

If you'd like to retrieve `TopGroups` for the resulting query, use the `BlockJoinCollector`. Note that this is not necessary, ie, if you simply want to collect the parent documents and don't need to see which child documents matched under that parent, then you can use any collector.

NOTE: If the overall query contains parent-only matches, for example you OR a parent-only query with a joined child-only query, then the resulting collected documents will be correct, however the `TopGroups` you get from `BlockJoinCollector` will not contain every child for parents that had matched.

See `org.apache.lucene.search.join` for an overview.

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

Nested Class Summary
`static class` `BlockJoinQuery.ScoreMode`

Constructor Summary
`BlockJoinQuery(Query childQuery, Filter parentsFilter, BlockJoinQuery.ScoreMode scoreMode)`

Method Summary
`Object` `clone()` Returns a clone of this query.
`Weight` `createWeight(Searcher searcher)` Expert: Constructs an appropriate Weight implementation for this query.
`boolean` `equals(Object _other)`
`void` `extractTerms(Set<Term> terms)` Expert: adds all terms occurring in this query to the terms set.
`float` `getBoost()` Gets the boost for this clause.
`int` `hashCode()`
`Query` `rewrite(IndexReader reader)` Expert: called to re-write queries into primitive queries.
`void` `setBoost(float boost)` Sets the boost for this query clause to `b`.
`String` `toString(String field)` Prints a query to a string, with `field` assumed to be the default field and omitted.

Methods inherited from class org.apache.lucene.search.Query
`combine, getSimilarity, mergeBooleanQueries, toString, weight`

Methods inherited from class java.lang.Object
`finalize, getClass, notify, notifyAll, wait, wait, wait`

Constructor Detail

### BlockJoinQuery

    public BlockJoinQuery(Query childQuery,
                          Filter parentsFilter,
                          BlockJoinQuery.ScoreMode scoreMode)

Method Detail

### createWeight

    public Weight createWeight(Searcher searcher)
                        throws IOException

  Description copied from class: `Query`
  Expert: Constructs an appropriate Weight implementation for this query.

  Only implemented by primitive queries, which re-write to themselves.

  Overrides:
    `createWeight` in class `Query`
  Throws:
    `IOException`

### extractTerms

    public void extractTerms(Set<Term> terms)

  Description copied from class: `Query`
  Expert: adds all terms occurring in this query to the terms set. Only works if this query is in its `rewritten` form.

  Overrides:
    `extractTerms` in class `Query`

### rewrite

    public Query rewrite(IndexReader reader)
                  throws IOException

  Description copied from class: `Query`
  Expert: called to re-write queries into primitive queries. For example, a PrefixQuery will be rewritten into a BooleanQuery that consists of TermQuerys.

  Overrides:
    `rewrite` in class `Query`
  Throws:
    `IOException`

### toString

    public String toString(String field)

  Description copied from class: `Query`
  Prints a query to a string, with `field` assumed to be the default field and omitted.

  The representation used is one that is supposed to be readable by `QueryParser`. However, there are the following limitations:

  - If the query was created by the parser, the printed representation may not be exactly what was parsed. For example, characters that need to be escaped will be represented without the required backslash.
  - Some of the more complicated queries (e.g. span queries) don't have a representation that can be parsed by QueryParser.

  Specified by:
    `toString` in class `Query`

### setBoost

    public void setBoost(float boost)

  Description copied from class: `Query`
  Sets the boost for this query clause to `b`. Documents matching this clause will (in addition to the normal weightings) have their score multiplied by `b`.

  Overrides:
    `setBoost` in class `Query`

### getBoost

    public float getBoost()

  Description copied from class: `Query`
  Gets the boost for this clause. Documents matching this clause will (in addition to the normal weightings) have their score multiplied by `b`. The boost is 1.0 by default.

  Overrides:
    `getBoost` in class `Query`

### equals

    public boolean equals(Object _other)

  Overrides:
    `equals` in class `Query`

### hashCode

    public int hashCode()

  Overrides:
    `hashCode` in class `Query`

### clone

    public Object clone()

  Description copied from class: `Query`
  Returns a clone of this query.

  Overrides:
    `clone` in class `Query`

Copyright © 2000-2011 Apache Software Foundation. All Rights Reserved.