Package org.apache.lucene.search.similarities

# Class PerFieldSimilarityWrapper

java.lang.Object
org.apache.lucene.search.similarities.Similarity
org.apache.lucene.search.similarities.PerFieldSimilarityWrapper

public abstract class PerFieldSimilarityWrapper extends Similarity
Provides the ability to use a different `Similarity` for different fields.

Subclasses should implement `get(String)` to return an appropriate Similarity (for example, using field-specific parameter values) for the field.

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

## Nested Class Summary

## Nested classes/interfaces inherited from class org.apache.lucene.search.similarities.Similarity

`Similarity.SimScorer`

## Constructor Summary

Constructors
Constructor
Description
`PerFieldSimilarityWrapper()`
Sole constructor.

## Method Summary

Modifier and Type
Method
Description
`final long`
`computeNorm(FieldInvertState state)`
Computes the normalization value for a field at index-time.
`abstract Similarity`
`get(String name)`
Returns a `Similarity` for scoring a field.
`final Similarity.SimScorer`
`scorer(float boost, CollectionStatistics collectionStats, TermStatistics... termStats)`
Compute any collection-level weight (e.g.

### Methods inherited from class org.apache.lucene.search.similarities.Similarity

`getDiscountOverlaps`

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

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

## Constructor Details

### PerFieldSimilarityWrapper

public PerFieldSimilarityWrapper()
Sole constructor. (For invocation by subclass constructors, typically implicit.)

## Method Details

### computeNorm

public final long computeNorm(FieldInvertState state)
Description copied from class: `Similarity`
Computes the normalization value for a field at index-time.

The default implementation uses `SmallFloat.intToByte4(int)` to encode the number of terms as a single byte.

WARNING: The default implementation is used by Lucene's supplied Similarity classes, which means you can change the Similarity at runtime without reindexing. If you override this method, you'll need to re-index documents for it to take effect.

Matches in longer fields are less precise, so implementations of this method usually set smaller values when `state.getLength()` is large, and larger values when `state.getLength()` is small.

Note that for a given term-document frequency, greater unsigned norms must produce scores that are lower or equal, ie. for two encoded norms `n1` and `n2` so that `Long.compareUnsigned(n1, n2) > 0` then `SimScorer.score(freq, n1) <= SimScorer.score(freq, n2)` for any legal `freq`.

`0` is not a legal norm, so `1` is the norm that produces the highest scores.

Overrides:
  `computeNorm` in class `Similarity`
Parameters:
  `state` - accumulated state of term processing for this field
Returns:
  computed norm value

### scorer

public final Similarity.SimScorer scorer(float boost, CollectionStatistics collectionStats, TermStatistics... termStats)
Description copied from class: `Similarity`
Compute any collection-level weight (e.g. IDF, average document length, etc) needed for scoring a query.

Specified by:
  `scorer` in class `Similarity`
Parameters:
  `boost` - a multiplicative factor to apply to the produces scores
  `collectionStats` - collection-level statistics, such as the number of tokens in the collection.
  `termStats` - term-level statistics, such as the document frequency of a term across the collection.
Returns:
  SimWeight object with the information this Similarity needs to score a query.

### get

public abstract Similarity get(String name)
Returns a `Similarity` for scoring a field.