예제 #1
0
            internal virtual Explanation DoExplain(AtomicReaderContext info, int doc)
            {
                var subQueryExpl = subQueryWeight.Explain(info, doc);

                if (!subQueryExpl.IsMatch)
                {
                    return(subQueryExpl);
                }
                // match
                var valSrcExpls = new Explanation[valSrcWeights.Length];

                for (int i = 0; i < valSrcWeights.Length; i++)
                {
                    valSrcExpls[i] = valSrcWeights[i].Explain(info, doc);
                }
                Explanation customExp = outerInstance.GetCustomScoreProvider(info)
                                        .CustomExplain(doc, subQueryExpl, valSrcExpls);
                float       sc  = outerInstance.Boost * customExp.Value;
                Explanation res = new ComplexExplanation(true, sc, outerInstance.ToString() + ", product of:");

                res.AddDetail(customExp);
                res.AddDetail(new Explanation(outerInstance.Boost, "queryBoost"));
                // actually using the q boost as q weight (== weight value)
                return(res);
            }
예제 #2
0
            private Explanation DoExplain(IndexReader reader, int doc)
            {
                Scorer[] valSrcScorers = new Scorer[valSrcWeights.Length];
                for (int i = 0; i < valSrcScorers.Length; i++)
                {
                    valSrcScorers[i] = valSrcWeights[i].Scorer(reader, true, false);
                }
                Explanation subQueryExpl = subQueryWeight.Explain(reader, doc);

                if (!subQueryExpl.IsMatch())
                {
                    return(subQueryExpl);
                }
                // match
                Explanation[] valSrcExpls = new Explanation[valSrcScorers.Length];
                for (int i = 0; i < valSrcScorers.Length; i++)
                {
                    valSrcExpls[i] = valSrcScorers[i].Explain(doc);
                }
                Explanation customExp = Enclosing_Instance.GetCustomScoreProvider(reader).CustomExplain(doc, subQueryExpl, valSrcExpls);
                float       sc        = GetValue() * customExp.GetValue();
                Explanation res       = new ComplexExplanation(true, sc, Enclosing_Instance.ToString() + ", product of:");

                res.AddDetail(customExp);
                res.AddDetail(new Explanation(GetValue(), "queryBoost"));                 // actually using the q boost as q weight (== weight value)
                return(res);
            }
예제 #3
0
            public override Explanation Explain(AtomicReaderContext readerContext, int doc)
            {
                Explanation subQueryExpl = qWeight.Explain(readerContext, doc);

                if (!subQueryExpl.IsMatch)
                {
                    return(subQueryExpl);
                }
                FunctionValues vals = outerInstance.boostVal.GetValues(fcontext, readerContext);
                float          sc   = subQueryExpl.Value * vals.SingleVal(doc);
                Explanation    res  = new ComplexExplanation(true, sc, outerInstance.ToString() + ", product of:");

                res.AddDetail(subQueryExpl);
                res.AddDetail(vals.Explain(doc));
                return(res);
            }
예제 #4
0
 public override Explanation Explain(AtomicReaderContext context, int doc)
 {
     return(baseWeight.Explain(context, doc));
 }
예제 #5
0
            public override Explanation Explain(AtomicReaderContext context, int doc)
            {
                Explanation innerExplain = m_innerWeight.Explain(context, doc);

                return(m_parent.m_scorerBuilder.Explain(context.AtomicReader, doc, innerExplain));
            }
            public virtual Explanation Explain(Monodoc.Lucene.Net.Index.IndexReader reader, int doc)
            {
                Explanation sumExpl = new Explanation();

                sumExpl.SetDescription("sum of:");
                int   coord    = 0;
                int   maxCoord = 0;
                float sum      = 0.0f;

                for (int i = 0; i < weights.Count; i++)
                {
                    BooleanClause c = (BooleanClause)Enclosing_Instance.clauses[i];
                    Weight        w = (Weight)weights[i];
                    Explanation   e = w.Explain(reader, doc);
                    if (!c.prohibited)
                    {
                        maxCoord++;
                    }
                    if (e.GetValue() > 0)
                    {
                        if (!c.prohibited)
                        {
                            sumExpl.AddDetail(e);
                            sum += e.GetValue();
                            coord++;
                        }
                        else
                        {
                            return(new Explanation(0.0f, "match prohibited"));
                        }
                    }
                    else if (c.required)
                    {
                        return(new Explanation(0.0f, "match required"));
                    }
                }
                sumExpl.SetValue(sum);

                if (coord == 1)
                {
                    // only one clause matched
                    sumExpl = sumExpl.GetDetails()[0]; // eliminate wrapper
                }
                float coordFactor = Enclosing_Instance.GetSimilarity(searcher).Coord(coord, maxCoord);

                if (coordFactor == 1.0f)
                {
                    // coord is no-op
                    return(sumExpl);
                }
                // eliminate wrapper
                else
                {
                    Explanation result = new Explanation();
                    result.SetDescription("product of:");
                    result.AddDetail(sumExpl);
                    result.AddDetail(new Explanation(coordFactor, "coord(" + coord + "/" + maxCoord + ")"));
                    result.SetValue(sum * coordFactor);
                    return(result);
                }
            }
예제 #7
0
            public override Explanation Explain(IndexReader reader, int doc)
            {
                Explanation innerExplain = _innerWeight.Explain(reader, doc);

                return(_parent._scorerBuilder.Explain(reader, doc, innerExplain));
            }
예제 #8
0
 public override Lucene.Net.Search.Explanation Explain(IndexReader reader, int doc, IState state)
 {
     return(_inner.Explain(reader, doc, state));
 }