Class BaseSimilarityTestCase

java.lang.Object
org.junit.Assert
org.apache.lucene.tests.util.LuceneTestCase
org.apache.lucene.tests.search.similarities.BaseSimilarityTestCase

public abstract class BaseSimilarityTestCase extends LuceneTestCase
Abstract class to do basic tests for a similarity. NOTE: This test focuses on the similarity impl, nothing else. The [stretch] goal is for this test to be so thorough in testing a new Similarity that if this test passes, then all Lucene/Solr tests should also pass. Ie, if there is some bug in a given Similarity that this test fails to catch then this test needs to be improved!
  • Constructor Details

    • BaseSimilarityTestCase

      public BaseSimilarityTestCase()
  • Method Details

    • beforeClass

      public static void beforeClass() throws Exception
      Throws:
      Exception
    • afterClass

      public static void afterClass() throws Exception
      Throws:
      Exception
    • getSimilarity

      protected abstract Similarity getSimilarity(Random random)
      Return a new similarity with all parameters randomized within valid ranges.
    • testRandomScoring

      public void testRandomScoring() throws Exception
      Tests scoring across a bunch of random terms/corpora/frequencies for each possible document length. It does the following checks:
      • scores are non-negative and finite.
      • score matches the explanation exactly.
      • internal explanations calculations are sane (e.g. sum of: and so on actually compute sums)
      • scores don't decrease as term frequencies increase: e.g. score(freq=N + 1) >= score(freq=N)
      • scores don't decrease as documents get shorter, e.g. score(len=M) >= score(len=M+1)
      • scores don't decrease as terms get rarer, e.g. score(term=N) >= score(term=N+1)
      • scoring works for floating point frequencies (e.g. sloppy phrase and span queries will work)
      • scoring works for reasonably large 64-bit statistic values (e.g. distributed search will work)
      • scoring works for reasonably large boost values (0 .. Integer.MAX_VALUE, e.g. query boosts will work)
      • scoring works for parameters randomized within valid ranges (see getSimilarity(Random))
      Throws:
      Exception