Search in sources :

Example 1 with SolrReturnFields

use of org.apache.solr.search.SolrReturnFields in project lucene-solr by apache.

the class QueryComponent method prepare.

@Override
public void prepare(ResponseBuilder rb) throws IOException {
    SolrQueryRequest req = rb.req;
    SolrParams params = req.getParams();
    if (!params.getBool(COMPONENT_NAME, true)) {
        return;
    }
    SolrQueryResponse rsp = rb.rsp;
    // Set field flags    
    ReturnFields returnFields = new SolrReturnFields(req);
    rsp.setReturnFields(returnFields);
    int flags = 0;
    if (returnFields.wantsScore()) {
        flags |= SolrIndexSearcher.GET_SCORES;
    }
    rb.setFieldFlags(flags);
    String defType = params.get(QueryParsing.DEFTYPE, QParserPlugin.DEFAULT_QTYPE);
    // get it from the response builder to give a different component a chance
    // to set it.
    String queryString = rb.getQueryString();
    if (queryString == null) {
        // this is the normal way it's set.
        queryString = params.get(CommonParams.Q);
        rb.setQueryString(queryString);
    }
    try {
        QParser parser = QParser.getParser(rb.getQueryString(), defType, req);
        Query q = parser.getQuery();
        if (q == null) {
            // normalize a null query to a query that matches nothing
            q = new MatchNoDocsQuery();
        }
        rb.setQuery(q);
        String rankQueryString = rb.req.getParams().get(CommonParams.RQ);
        if (rankQueryString != null) {
            QParser rqparser = QParser.getParser(rankQueryString, defType, req);
            Query rq = rqparser.getQuery();
            if (rq instanceof RankQuery) {
                RankQuery rankQuery = (RankQuery) rq;
                rb.setRankQuery(rankQuery);
                MergeStrategy mergeStrategy = rankQuery.getMergeStrategy();
                if (mergeStrategy != null) {
                    rb.addMergeStrategy(mergeStrategy);
                    if (mergeStrategy.handlesMergeFields()) {
                        rb.mergeFieldHandler = mergeStrategy;
                    }
                }
            } else {
                throw new SolrException(SolrException.ErrorCode.BAD_REQUEST, "rq parameter must be a RankQuery");
            }
        }
        rb.setSortSpec(parser.getSortSpec(true));
        rb.setQparser(parser);
        final String cursorStr = rb.req.getParams().get(CursorMarkParams.CURSOR_MARK_PARAM);
        if (null != cursorStr) {
            final CursorMark cursorMark = new CursorMark(rb.req.getSchema(), rb.getSortSpec());
            cursorMark.parseSerializedTotem(cursorStr);
            rb.setCursorMark(cursorMark);
        }
        String[] fqs = req.getParams().getParams(CommonParams.FQ);
        if (fqs != null && fqs.length != 0) {
            List<Query> filters = rb.getFilters();
            // if filters already exists, make a copy instead of modifying the original
            filters = filters == null ? new ArrayList<>(fqs.length) : new ArrayList<>(filters);
            for (String fq : fqs) {
                if (fq != null && fq.trim().length() != 0) {
                    QParser fqp = QParser.getParser(fq, req);
                    fqp.setIsFilter(true);
                    filters.add(fqp.getQuery());
                }
            }
            // if filter cache is disabled
            if (!filters.isEmpty()) {
                rb.setFilters(filters);
            }
        }
    } catch (SyntaxError e) {
        throw new SolrException(SolrException.ErrorCode.BAD_REQUEST, e);
    }
    if (params.getBool(GroupParams.GROUP, false)) {
        prepareGrouping(rb);
    } else {
        //Validate only in case of non-grouping search.
        if (rb.getSortSpec().getCount() < 0) {
            throw new SolrException(SolrException.ErrorCode.BAD_REQUEST, "'rows' parameter cannot be negative");
        }
    }
    //Input validation.
    if (rb.getSortSpec().getOffset() < 0) {
        throw new SolrException(SolrException.ErrorCode.BAD_REQUEST, "'start' parameter cannot be negative");
    }
}
Also used : SolrQueryResponse(org.apache.solr.response.SolrQueryResponse) SolrReturnFields(org.apache.solr.search.SolrReturnFields) ReturnFields(org.apache.solr.search.ReturnFields) Query(org.apache.lucene.search.Query) MatchNoDocsQuery(org.apache.lucene.search.MatchNoDocsQuery) RankQuery(org.apache.solr.search.RankQuery) CursorMark(org.apache.solr.search.CursorMark) MatchNoDocsQuery(org.apache.lucene.search.MatchNoDocsQuery) ArrayList(java.util.ArrayList) SolrReturnFields(org.apache.solr.search.SolrReturnFields) RankQuery(org.apache.solr.search.RankQuery) SolrQueryRequest(org.apache.solr.request.SolrQueryRequest) SyntaxError(org.apache.solr.search.SyntaxError) QParser(org.apache.solr.search.QParser) SolrParams(org.apache.solr.common.params.SolrParams) ModifiableSolrParams(org.apache.solr.common.params.ModifiableSolrParams) SolrException(org.apache.solr.common.SolrException)

Example 2 with SolrReturnFields

use of org.apache.solr.search.SolrReturnFields in project lucene-solr by apache.

the class MoreLikeThisComponent method process.

@Override
public void process(ResponseBuilder rb) throws IOException {
    SolrParams params = rb.req.getParams();
    if (params.getBool(MoreLikeThisParams.MLT, false)) {
        ReturnFields returnFields = new SolrReturnFields(rb.req);
        int flags = 0;
        if (returnFields.wantsScore()) {
            flags |= SolrIndexSearcher.GET_SCORES;
        }
        rb.setFieldFlags(flags);
        log.debug("Starting MoreLikeThis.Process.  isShard: " + params.getBool(ShardParams.IS_SHARD));
        SolrIndexSearcher searcher = rb.req.getSearcher();
        if (params.getBool(ShardParams.IS_SHARD, false)) {
            if (params.get(MoreLikeThisComponent.DIST_DOC_ID) == null) {
                if (rb.getResults().docList.size() == 0) {
                    // return empty response
                    rb.rsp.add("moreLikeThis", new NamedList<DocList>());
                    return;
                }
                MoreLikeThisHandler.MoreLikeThisHelper mlt = new MoreLikeThisHandler.MoreLikeThisHelper(params, searcher);
                NamedList<BooleanQuery> bQuery = mlt.getMoreLikeTheseQuery(rb.getResults().docList);
                NamedList<String> temp = new NamedList<>();
                Iterator<Entry<String, BooleanQuery>> idToQueryIt = bQuery.iterator();
                while (idToQueryIt.hasNext()) {
                    Entry<String, BooleanQuery> idToQuery = idToQueryIt.next();
                    String s = idToQuery.getValue().toString();
                    log.debug("MLT Query:" + s);
                    temp.add(idToQuery.getKey(), idToQuery.getValue().toString());
                }
                rb.rsp.add("moreLikeThis", temp);
            } else {
                NamedList<DocList> sim = getMoreLikeThese(rb, rb.req.getSearcher(), rb.getResults().docList, flags);
                rb.rsp.add("moreLikeThis", sim);
            }
        } else {
            // non distrib case
            NamedList<DocList> sim = getMoreLikeThese(rb, rb.req.getSearcher(), rb.getResults().docList, flags);
            rb.rsp.add("moreLikeThis", sim);
        }
    }
}
Also used : BooleanQuery(org.apache.lucene.search.BooleanQuery) SolrReturnFields(org.apache.solr.search.SolrReturnFields) ReturnFields(org.apache.solr.search.ReturnFields) MoreLikeThisHandler(org.apache.solr.handler.MoreLikeThisHandler) NamedList(org.apache.solr.common.util.NamedList) SolrIndexSearcher(org.apache.solr.search.SolrIndexSearcher) SolrReturnFields(org.apache.solr.search.SolrReturnFields) Entry(java.util.Map.Entry) SolrParams(org.apache.solr.common.params.SolrParams) ModifiableSolrParams(org.apache.solr.common.params.ModifiableSolrParams) DocList(org.apache.solr.search.DocList)

Example 3 with SolrReturnFields

use of org.apache.solr.search.SolrReturnFields in project lucene-solr by apache.

the class RealTimeGetComponent method prepare.

@Override
public void prepare(ResponseBuilder rb) throws IOException {
    // Set field flags
    ReturnFields returnFields = new SolrReturnFields(rb.req);
    rb.rsp.setReturnFields(returnFields);
}
Also used : SolrReturnFields(org.apache.solr.search.SolrReturnFields) ReturnFields(org.apache.solr.search.ReturnFields) SolrReturnFields(org.apache.solr.search.SolrReturnFields)

Example 4 with SolrReturnFields

use of org.apache.solr.search.SolrReturnFields in project lucene-solr by apache.

the class XMLWriter method writeSolrDocument.

/**
   * The SolrDocument should already have multivalued fields implemented as
   * Collections -- this will not rewrite to &lt;arr&gt;
   */
@Override
public void writeSolrDocument(String name, SolrDocument doc, ReturnFields returnFields, int idx) throws IOException {
    startTag("doc", name, false);
    incLevel();
    for (String fname : doc.getFieldNames()) {
        if (returnFields != null && !returnFields.wantsField(fname)) {
            continue;
        }
        Object val = doc.getFieldValue(fname);
        if ("_explain_".equals(fname)) {
            System.out.println(val);
        }
        writeVal(fname, val);
    }
    if (doc.hasChildDocuments()) {
        for (SolrDocument childDoc : doc.getChildDocuments()) {
            writeSolrDocument(null, childDoc, new SolrReturnFields(), idx);
        }
    }
    decLevel();
    writer.write("</doc>");
}
Also used : SolrDocument(org.apache.solr.common.SolrDocument) SolrReturnFields(org.apache.solr.search.SolrReturnFields)

Example 5 with SolrReturnFields

use of org.apache.solr.search.SolrReturnFields in project lucene-solr by apache.

the class TestSolrQueryResponse method testReturnFields.

@Test
public void testReturnFields() throws Exception {
    final SolrQueryResponse response = new SolrQueryResponse();
    final ReturnFields defaultReturnFields = new SolrReturnFields();
    assertEquals("returnFields initial value", defaultReturnFields.toString(), response.getReturnFields().toString());
    final SolrReturnFields newValue = new SolrReturnFields((random().nextBoolean() ? SolrReturnFields.SCORE : "value"), null);
    response.setReturnFields(newValue);
    assertEquals("returnFields new value", newValue.toString(), response.getReturnFields().toString());
}
Also used : SolrQueryResponse(org.apache.solr.response.SolrQueryResponse) SolrReturnFields(org.apache.solr.search.SolrReturnFields) ReturnFields(org.apache.solr.search.ReturnFields) SolrReturnFields(org.apache.solr.search.SolrReturnFields) Test(org.junit.Test)

Aggregations

SolrReturnFields (org.apache.solr.search.SolrReturnFields)13 ReturnFields (org.apache.solr.search.ReturnFields)8 SolrDocument (org.apache.solr.common.SolrDocument)7 SolrDocumentList (org.apache.solr.common.SolrDocumentList)5 SolrQueryRequest (org.apache.solr.request.SolrQueryRequest)5 Test (org.junit.Test)5 ArrayList (java.util.ArrayList)4 SolrParams (org.apache.solr.common.params.SolrParams)4 NamedList (org.apache.solr.common.util.NamedList)4 SolrException (org.apache.solr.common.SolrException)3 SolrQueryResponse (org.apache.solr.response.SolrQueryResponse)3 DocList (org.apache.solr.search.DocList)3 IOException (java.io.IOException)2 StringWriter (java.io.StringWriter)2 Date (java.util.Date)2 List (java.util.List)2 Map (java.util.Map)2 BooleanQuery (org.apache.lucene.search.BooleanQuery)2 Query (org.apache.lucene.search.Query)2 ModifiableSolrParams (org.apache.solr.common.params.ModifiableSolrParams)2