Example usage for org.apache.solr.search DocIterator score

List of usage examples for org.apache.solr.search DocIterator score

Introduction

In this page you can find the example usage for org.apache.solr.search DocIterator score.

Prototype

public float score();

Source Link

Document

Returns the score for the document just returned by nextDoc()

The value returned may be meaningless depending on the context in which the DocIterator instance was retrieved.

Usage

From source file:com.mindquarry.search.solr.request.JSONWriter.java

License:Open Source License

public void writeDocList(String name, DocList ids, Set<String> fields, Map otherFields) throws IOException {
    boolean includeScore = false;
    if (fields != null) {
        includeScore = fields.contains("score");
        if (fields.size() == 0 || (fields.size() == 1 && includeScore) || fields.contains("*")) {
            fields = null; // null means return all stored fields
        }/*  w ww  .j a  va 2 s .  c  o  m*/
    }

    int sz = ids.size();

    writer.write('{');
    incLevel();
    writeKey("numFound", false);
    writeInt(null, ids.matches());
    writer.write(',');
    writeKey("start", false);
    writeInt(null, ids.offset());

    if (includeScore) {
        writer.write(',');
        writeKey("maxScore", false);
        writeFloat(null, ids.maxScore());
    }
    writer.write(',');
    // indent();
    writeKey("docs", false);
    writer.write('[');

    incLevel();
    boolean first = true;

    DocIterator iterator = ids.iterator();
    for (int i = 0; i < sz; i++) {
        int id = iterator.nextDoc();
        Document doc = searcher.doc(id);

        if (first) {
            first = false;
        } else {
            writer.write(',');
        }
        indent();
        writeDoc(null, doc, fields, (includeScore ? iterator.score() : 0.0f), includeScore);
    }
    decLevel();
    writer.write(']');

    if (otherFields != null) {
        writeMap(null, otherFields, true, false);
    }

    decLevel();
    indent();
    writer.write('}');
}

From source file:com.mindquarry.search.solr.request.QuickSearchSearchJSONWriter.java

License:Open Source License

public void writeDocList(String name, DocList ids, Set<String> fields, Map otherFields) throws IOException {
    boolean includeScore = false;
    if (fields != null) {
        includeScore = fields.contains("score"); //$NON-NLS-1$
        if (fields.size() == 0 || (fields.size() == 1 && includeScore) || fields.contains("*")) { //$NON-NLS-1$
            fields = null; // null means return all stored fields
        }/*ww  w.  ja  v a  2 s.c o m*/
    }
    int sz = ids.size();

    writer.write('{');
    incLevel();
    writeKey("numFound", false); //$NON-NLS-1$
    writeInt(null, ids.matches());
    writer.write(',');
    writeKey("start", false); //$NON-NLS-1$
    writeInt(null, ids.offset());

    if (includeScore) {
        writer.write(',');
        writeKey("maxScore", false); //$NON-NLS-1$
        writeFloat(null, ids.maxScore());
    }
    writer.write(',');
    writeKey("docs", false); //$NON-NLS-1$
    writer.write('{');

    incLevel();
    HashMap<String, List<DocWithScore>> sets = new HashMap<String, List<DocWithScore>>();

    DocIterator iterator = ids.iterator();
    for (int i = 0; i < sz; i++) {
        int id = iterator.nextDoc();
        Document doc = searcher.doc(id);

        for (Fieldable ff : (List<Fieldable>) doc.getFields()) {
            String fname = ff.name();
            String fval = ff.stringValue();

            if (fname.equals("type")) { //$NON-NLS-1$
                String type = fval;
                if (type.equals("wiki")) { //$NON-NLS-1$
                    type = type.replaceFirst("w", "W"); //$NON-NLS-1$ //$NON-NLS-2$
                } else if (type.equals("tasks")) { //$NON-NLS-1$
                    type = type.replaceFirst("t", "T"); //$NON-NLS-1$ //$NON-NLS-2$
                }
                if (!sets.containsKey(type)) {
                    sets.put(type, new ArrayList<DocWithScore>());
                }
                if (includeScore) {
                    sets.get(type).add(new DocWithScore(doc, iterator.score()));
                } else {
                    sets.get(type).add(new DocWithScore(doc, 0.0f));
                }
            }
        }
    }
    boolean firstSet = true;

    Set<String> keys = sets.keySet();
    Iterator<String> kIt = keys.iterator();
    while (kIt.hasNext()) {
        String key = kIt.next();
        List<DocWithScore> docs = sets.get(key);

        if (firstSet) {
            firstSet = false;
        } else {
            writer.write(',');
        }
        indent();
        writeKey(key, false);
        writer.write('[');
        incLevel();

        boolean firstDoc = true;
        for (Iterator iter = docs.iterator(); iter.hasNext();) {
            DocWithScore doc = (DocWithScore) iter.next();

            if (firstDoc) {
                firstDoc = false;
            } else {
                writer.write(',');
            }
            writer.write('{');

            boolean firstEntry = true;
            for (Fieldable ff : (List<Fieldable>) doc.getDoc().getFields()) {
                String fname = ff.name();

                if ((fname.equals("location")) || (fname.equals("title"))) { //$NON-NLS-1$ //$NON-NLS-2$
                    if (firstEntry) {
                        firstEntry = false;
                    } else {
                        writer.write(',');
                    }
                    indent();
                    writeKey(fname, false);
                    if (fname.equals("location")) { //$NON-NLS-1$
                        writeStr(null, transformToWebPath(ff.stringValue()), true);
                    } else {
                        writeStr(null, ff.stringValue(), true);
                    }
                }
            }
            // write score
            if (includeScore) {
                writer.write(',');
                indent();
                writeKey("score", false); //$NON-NLS-1$

                Float score = doc.getScore() * 100;
                int absScore = score.intValue();
                writeInt(null, absScore);
            }
            indent();
            writer.write('}');
        }
        writer.write(']');
    }
    decLevel();
    indent();
    writer.write('}');

    if (otherFields != null) {
        writeMap(null, otherFields, true, false);
    }
    decLevel();
    indent();
    writer.write('}');
}

From source file:net.yacy.cora.federate.solr.responsewriter.EnhancedXMLResponseWriter.java

License:Open Source License

private static final void writeDocs(final Writer writer, final SolrQueryRequest request, final DocList response)
        throws IOException {
    boolean includeScore = false;
    final int sz = response.size();
    writer.write("<result");
    writeAttr(writer, "name", "response");
    writeAttr(writer, "numFound", Long.toString(response.matches()));
    writeAttr(writer, "start", Long.toString(response.offset()));
    if (includeScore) {
        writeAttr(writer, "maxScore", Float.toString(response.maxScore()));
    }/*from   ww  w.  j a va2 s.c o m*/
    if (sz == 0) {
        writer.write("/>");
        return;
    }
    writer.write('>');
    writer.write(lb);
    SolrIndexSearcher searcher = request.getSearcher();
    DocIterator iterator = response.iterator();
    includeScore = includeScore && response.hasScores();
    IndexSchema schema = request.getSchema();
    for (int i = 0; i < sz; i++) {
        int id = iterator.nextDoc();
        Document doc = searcher.doc(id, DEFAULT_FIELD_LIST);
        writeDoc(writer, schema, null, doc.getFields(), (includeScore ? iterator.score() : 0.0f), includeScore);
    }
    writer.write("</result>");
    writer.write(lb);
}

From source file:net.yacy.cora.federate.solr.responsewriter.FlatJSONResponseWriter.java

License:Open Source License

private static final void writeDocs(final Writer writer, final SolrQueryRequest request, final DocList response)
        throws IOException {
    boolean includeScore = false;
    final int sz = response.size();
    SolrIndexSearcher searcher = request.getSearcher();
    DocIterator iterator = response.iterator();
    includeScore = includeScore && response.hasScores();
    IndexSchema schema = request.getSchema();
    for (int i = 0; i < sz; i++) {
        int id = iterator.nextDoc();
        Document doc = searcher.doc(id);
        writeDoc(writer, schema, null, doc.getFields(), (includeScore ? iterator.score() : 0.0f), includeScore);
    }//from w  w w .  j ava 2  s  .  c o m
}

From source file:org.alfresco.solr.query.AlfrescoReRankQParserPluginTest.java

License:Open Source License

@Test
public void testScale() throws Exception {

    assertU(delQ("*:*"));
    assertU(commit());//from w w w  .ja  v a  2  s  . c o  m

    String[] doc = { "id", "1", "term_s", "YYYY", "group_s", "group1", "test_ti", "5", "test_tl", "10",
            "test_tf", "2000" };
    assertU(adoc(doc));
    assertU(commit());
    String[] doc1 = { "id", "2", "term_s", "YYYY", "group_s", "group1", "test_ti", "50", "test_tl", "100",
            "test_tf", "200" };
    assertU(adoc(doc1));

    String[] doc2 = { "id", "3", "term_s", "YYYY", "test_ti", "5000", "test_tl", "100", "test_tf", "200" };
    assertU(adoc(doc2));
    assertU(commit());
    String[] doc3 = { "id", "4", "term_s", "YYYY", "test_ti", "500", "test_tl", "1000", "test_tf", "2000" };
    assertU(adoc(doc3));

    String[] doc4 = { "id", "5", "term_s", "YYYY", "group_s", "group2", "test_ti", "4", "test_tl", "10",
            "test_tf", "2000" };
    assertU(adoc(doc4));
    assertU(commit());
    String[] doc5 = { "id", "6", "term_s", "YYYY", "group_s", "group2", "test_ti", "10", "test_tl", "100",
            "test_tf", "200" };
    assertU(adoc(doc5));
    assertU(commit());

    //Calculate the scales manually
    ModifiableSolrParams params = new ModifiableSolrParams();
    params.add("rq", "{!alfrescoReRank reRankQuery=$rqq reRankDocs=200 scale=false}");
    params.add("df", "TEXT");
    params.add("q", "term_s:YYYY");
    params.add("rqq", "{!edismax bf=$bff}id:(1 2 4 5 6)");
    params.add("bff", "field(test_ti)");
    params.add("fl", "id,score");
    params.add("start", "0");
    params.add("rows", "6");

    SolrQueryRequest req = req(params);
    SolrQueryResponse res = null;

    try {
        res = queryAndResponse(null, req);
    } finally {
        req.close();
    }

    @SuppressWarnings("rawtypes")
    NamedList vals = res.getValues();
    ResultContext resultContext = (ResultContext) vals.get("response");

    DocList docs = resultContext.getDocList();
    DocIterator it = docs.iterator();
    float max = -Float.MAX_VALUE;
    List<Float> scores = new ArrayList<Float>();

    while (it.hasNext()) {
        it.next();
        float score = it.score();
        max = Math.max(score, max);
        scores.add(score);
    }

    float[] scaledScores = new float[scores.size()];

    for (int i = 0; i < scaledScores.length; i++) {
        float score = scores.get(i);
        if (i < 5) {
            //The first 5 docs are hit on the reRanker so add 1 to score
            scaledScores[i] = (score / max) + 1;
        } else {
            //The last score is not a hit on the reRanker
            scaledScores[i] = (score / max);
        }
    }

    //Get the scaled scores from the reRanker
    params = new ModifiableSolrParams();
    params.add("rq", "{!alfrescoReRank reRankQuery=$rqq reRankDocs=200 scale=true}");
    params.add("df", "TEXT");
    params.add("q", "term_s:YYYY");
    params.add("rqq", "{!edismax bf=$bff}id:(1 2 4 5 6)");
    params.add("bff", "field(test_ti)");
    params.add("fl", "id,score");
    params.add("start", "0");
    params.add("rows", "6");

    req = req(params);
    try {
        res = queryAndResponse(null, req);
    } finally {
        req.close();
    }
    vals = res.getValues();
    resultContext = (ResultContext) vals.get("response");
    docs = resultContext.getDocList();
    it = docs.iterator();

    int index = 0;
    while (it.hasNext()) {
        it.next();
        float score = it.score();
        float scaledScore = scaledScores[index++];
        Assert.assertEquals("score should be equal to scaled score", score, scaledScore, 0.00001);
    }

    req.close();
}

From source file:solr2155.solr.search.function.distance.MultiDistanceFunctionTest.java

License:Apache License

/** TODO propose that this go into Solr's test harness. */
private void assertQScore(SolrQueryRequest req, int docIdx, float targetScore) throws Exception {
    try {//from   ww  w.  j a  v a 2s  . com
        String handler = req.getParams().get(CommonParams.QT);
        SolrQueryResponse resp = h.queryAndResponse(handler, req);
        //      ResultContext resCtx = (ResultContext) resp.getValues().get("response");
        final DocList docList = (DocList) resp.getValues().get("response");
        assertTrue("expected more docs", docList.size() >= docIdx + 1);
        assertTrue("expected scores", docList.hasScores());
        DocIterator docIterator = docList.iterator();
        for (int i = -1; i < docIdx; i++) {//loops at least once
            docIterator.nextDoc();
        }
        float gotScore = docIterator.score();
        assertEquals(gotScore, targetScore, 0.0001);
    } finally {
        req.close();
    }
}