public virtual void TestNoPayload() { PayloadTermQuery q1 = new PayloadTermQuery(new Term(PayloadHelper.NO_PAYLOAD_FIELD, "zero"), new MaxPayloadFunction()); PayloadTermQuery q2 = new PayloadTermQuery(new Term(PayloadHelper.NO_PAYLOAD_FIELD, "foo"), new MaxPayloadFunction()); BooleanClause c1 = new BooleanClause(q1, Occur.MUST); BooleanClause c2 = new BooleanClause(q2, Occur.MUST_NOT); BooleanQuery query = new BooleanQuery(); query.Add(c1); query.Add(c2); TopDocs hits = Searcher.Search(query, null, 100); Assert.IsTrue(hits != null, "hits is null and it shouldn't be"); Assert.IsTrue(hits.TotalHits == 1, "hits Size: " + hits.TotalHits + " is not: " + 1); int[] results = new int[1]; results[0] = 0; //hits.ScoreDocs[0].Doc; CheckHits.CheckHitCollector(Random, query, PayloadHelper.NO_PAYLOAD_FIELD, Searcher, results, Similarity); }
public virtual void TestSortValues() { var expr = JavascriptCompiler.Compile("sqrt(_score)"); SimpleBindings bindings = new SimpleBindings(); bindings.Add(new SortField("_score", SortFieldType.SCORE)); Sort sort = new Sort(expr.GetSortField(bindings, true)); Query query = new TermQuery(new Term("body", "contents")); TopFieldDocs td = searcher.Search(query, null, 3, sort, true, true); for (int i = 0; i < 3; i++) { FieldDoc d = (FieldDoc)td.ScoreDocs[i]; float expected = (float)Math.Sqrt(d.Score); float actual = (float)((double)d.Fields[0]); Assert.AreEqual(expected, actual, CheckHits.ExplainToleranceDelta(expected, actual)); } }
private void AssertHits(Query q, float[] scores) { ScoreDoc[] expected = new ScoreDoc[scores.Length]; int[] expectedDocs = new int[scores.Length]; for (int i = 0; i < expected.Length; i++) { expectedDocs[i] = i; expected[i] = new ScoreDoc(i, scores[i]); } TopDocs docs = searcher.Search(q, null, documents.Count, new Sort(new SortField("id", SortFieldType.STRING)), true, false); CheckHits.DoCheckHits( #if FEATURE_INSTANCE_TESTDATA_INITIALIZATION this, #endif Random, q, "", searcher, expectedDocs); CheckHits.CheckHitsQuery(q, expected, docs.ScoreDocs, expectedDocs); CheckHits.CheckExplanations(q, "", searcher); }
public virtual void TestExpressionRefersToExpression() { var expr1 = JavascriptCompiler.Compile("_score"); var expr2 = JavascriptCompiler.Compile("2*expr1"); var bindings = new SimpleBindings(); bindings.Add(new SortField("_score", SortFieldType.SCORE)); bindings.Add("expr1", expr1); Sort sort = new Sort(expr2.GetSortField(bindings, true)); Query query = new TermQuery(new Term("body", "contents")); TopFieldDocs td = searcher.Search(query, null, 3, sort, true, true); for (int i = 0; i < 3; i++) { FieldDoc d = (FieldDoc)td.ScoreDocs[i]; float expected = 2 * d.Score; float actual = (float)((double)d.Fields[0]); AreEqual(expected, actual, CheckHits.ExplainToleranceDelta (expected, actual)); } }
protected virtual void AssertHits(Query q, float[] scores) { ScoreDoc[] expected = new ScoreDoc[scores.Length]; int[] expectedDocs = new int[scores.Length]; for (int i = 0; i < expected.Length; i++) { expectedDocs[i] = i; expected[i] = new ScoreDoc(i, scores[i]); } TopDocs docs = searcher.Search(q, 2, new Sort(new SortField("id", SortFieldType.STRING))); /* * for (int i=0;i<docs.scoreDocs.length;i++) { * System.out.println(searcher.explain(q, docs.scoreDocs[i].doc)); * } */ CheckHits.DoCheckHits(Random(), q, "", searcher, expectedDocs, Similarity); CheckHits.CheckHitsQuery(q, expected, docs.ScoreDocs, expectedDocs); CheckHits.CheckExplanations(q, "", searcher); }
/** scores[] are in docId order */ protected virtual void CheckValueSource(ValueSource vs, float[] scores, float delta) { FunctionQuery q = new FunctionQuery(vs); // //TODO is there any point to this check? // int expectedDocs[] = new int[scores.length];//fill with ascending 0....length-1 // for (int i = 0; i < expectedDocs.length; i++) { // expectedDocs[i] = i; // } // CheckHits.checkHits(Random, q, "", indexSearcher, expectedDocs); TopDocs docs = indexSearcher.Search(q, 1000);//calculates the score for (int i = 0; i < docs.ScoreDocs.Length; i++) { ScoreDoc gotSD = docs.ScoreDocs[i]; float expectedScore = scores[gotSD.Doc]; assertEquals("Not equal for doc " + gotSD.Doc, expectedScore, gotSD.Score, delta); } CheckHits.CheckExplanations(q, "", indexSearcher); }
internal virtual void AssertQuery(Query query, Filter filter, Sort sort) { int size = TestUtil.NextInt(Random(), 1, searcher.IndexReader.MaxDoc / 5); TopDocs expected = searcher.Search(query, filter, size, sort, Random().NextBoolean (), Random().NextBoolean()); // make our actual sort, mutating original by replacing some of the // sortfields with equivalent expressions SortField[] original = sort.GetSort(); SortField[] mutated = new SortField[original.Length]; for (int i = 0; i < mutated.Length; i++) { if (Random().Next(3) > 0) { SortField s = original[i]; Expression expr = JavascriptCompiler.Compile(s.Field); SimpleBindings simpleBindings = new SimpleBindings(); simpleBindings.Add(s); bool reverse = s.Type == SortField.Type_e.SCORE || s.Reverse; mutated[i] = expr.GetSortField(simpleBindings, reverse); } else { mutated[i] = original[i]; } } Sort mutatedSort = new Sort(mutated); TopDocs actual = searcher.Search(query, filter, size, mutatedSort, Random().NextBoolean (), Random().NextBoolean()); CheckHits.CheckEqual(query, expected.ScoreDocs, actual.ScoreDocs); if (size < actual.TotalHits) { expected = searcher.SearchAfter(expected.ScoreDocs[size - 1], query, filter, size , sort); actual = searcher.SearchAfter(actual.ScoreDocs[size - 1], query, filter, size, mutatedSort ); CheckHits.CheckEqual(query, expected.ScoreDocs, actual.ScoreDocs); } }
public virtual void TestFiniteVersusInfinite() { for (int i = 0; i < numIterations; i++) { string reg = AutomatonTestUtil.RandomRegexp(Random); Automaton automaton = (new RegExp(reg, RegExpSyntax.NONE)).ToAutomaton(); IList <BytesRef> matchedTerms = new List <BytesRef>(); foreach (BytesRef t in terms) { if (BasicOperations.Run(automaton, t.Utf8ToString())) { matchedTerms.Add(t); } } Automaton alternate = BasicAutomata.MakeStringUnion(matchedTerms); //System.out.println("match " + matchedTerms.Size() + " " + alternate.getNumberOfStates() + " states, sigma=" + alternate.getStartPoints().length); //AutomatonTestUtil.minimizeSimple(alternate); //System.out.println("minmize done"); AutomatonQuery a1 = new AutomatonQuery(new Term("field", ""), automaton); AutomatonQuery a2 = new AutomatonQuery(new Term("field", ""), alternate); CheckHits.CheckEqual(a1, searcher.Search(a1, 25).ScoreDocs, searcher.Search(a2, 25).ScoreDocs); } }
protected internal virtual void Check(SpanQuery q, int[] docs) { CheckHits.CheckHitCollector(Random, q, null, Searcher, docs, Similarity); }
public virtual void TestSpanNearQuery() { SpanNearQuery q = MakeQuery(); CheckHits.DoCheckHits(Random(), q, FIELD, Searcher, new int[] { 0, 1 }, Similarity); }
// verify results are as expected. private void VerifyResults(float boost, IndexSearcher s, IDictionary <int, float> h1, IDictionary <int, float> h2customNeutral, IDictionary <int, float> h3CustomMul, IDictionary <int, float> h4CustomAdd, IDictionary <int, float> h5CustomMulAdd, Query q1, Query q2, Query q3, Query q4, Query q5) { // verify numbers of matches Log("#hits = " + h1.Count); assertEquals("queries should have same #hits", h1.Count, h2customNeutral.Count); assertEquals("queries should have same #hits", h1.Count, h3CustomMul.Count); assertEquals("queries should have same #hits", h1.Count, h4CustomAdd.Count); assertEquals("queries should have same #hits", h1.Count, h5CustomMulAdd.Count); QueryUtils.Check(Random(), q1, s, Rarely(), Similarity); QueryUtils.Check(Random(), q2, s, Rarely(), Similarity); QueryUtils.Check(Random(), q3, s, Rarely(), Similarity); QueryUtils.Check(Random(), q4, s, Rarely(), Similarity); QueryUtils.Check(Random(), q5, s, Rarely(), Similarity); // verify scores ratios foreach (int doc in h1.Keys) { Log("doc = " + doc); float fieldScore = ExpectedFieldScore(s.IndexReader.Document(doc).Get(ID_FIELD)); Log("fieldScore = " + fieldScore); assertTrue("fieldScore should not be 0", fieldScore > 0); float score1 = h1[doc]; LogResult("score1=", s, q1, doc, score1); float score2 = h2customNeutral[doc]; LogResult("score2=", s, q2, doc, score2); assertEquals("same score (just boosted) for neutral", boost * score1, score2, CheckHits.ExplainToleranceDelta(boost * score1, score2)); float score3 = h3CustomMul[doc]; LogResult("score3=", s, q3, doc, score3); assertEquals("new score for custom mul", boost * fieldScore * score1, score3, CheckHits.ExplainToleranceDelta(boost * fieldScore * score1, score3)); float score4 = h4CustomAdd[doc]; LogResult("score4=", s, q4, doc, score4); assertEquals("new score for custom add", boost * (fieldScore + score1), score4, CheckHits.ExplainToleranceDelta(boost * (fieldScore + score1), score4)); float score5 = h5CustomMulAdd[doc]; LogResult("score5=", s, q5, doc, score5); assertEquals("new score for custom mul add", boost * fieldScore * (score1 + fieldScore), score5, CheckHits.ExplainToleranceDelta(boost * fieldScore * (score1 + fieldScore), score5)); } }
/// <summary> /// Overrides superclass to ignore matches and focus on non-matches /// </summary> /// <seealso> cref= CheckHits#checkNoMatchExplanations </seealso> public override void Qtest(Query q, int[] expDocNrs) { CheckHits.CheckNoMatchExplanations(q, FIELD, Searcher, expDocNrs); }
protected internal virtual void Check(SpanQuery q, int[] docs) { CheckHits.CheckHitCollector(q, null, searcher, docs); }
public virtual void TestSpanNearQuery() { SpanNearQuery q = MakeQuery(); CheckHits.DoCheckHits(Random, q, FIELD, searcher, new int[] { 0, 1 }); }