Example usage for org.apache.solr.common.util ContentStream getReader

List of usage examples for org.apache.solr.common.util ContentStream getReader

Introduction

In this page you can find the example usage for org.apache.solr.common.util ContentStream getReader.

Prototype

Reader getReader() throws IOException;

Source Link

Document

Get an open stream.

Usage

From source file:com.sindicetech.siren.solr.handler.JsonLoader.java

License:Open Source License

@Override
public void load(final SolrQueryRequest req, final SolrQueryResponse rsp, final ContentStream stream,
        final UpdateRequestProcessor processor) throws Exception {
    Reader reader = null;// w  w  w .  j  a v a2s. c  om
    try {
        reader = stream.getReader();
        // keep a copy of the body for the source entry
        // TODO: instead of reading the stream to make a copy, try to create a copy of the json
        // while parsing it in the JsonReader
        String body = IOUtils.toString(reader);

        FieldMappersHandler mappersHandler = new FieldMappersHandler(fieldMappers, req.getCore());
        DocumentBuilder docBuilder = new DocumentBuilder();

        // Add the source field entry
        FieldEntry source = new FieldEntry(SOURCE_FIELDNAME, body);
        docBuilder.add(mappersHandler.map(source));

        // Add the id field initialised with a UUID. It will be overwritten if an id field exist in the JSON document.
        FieldEntry id = new FieldEntry(IdFieldMapper.INPUT_FIELD,
                UUID.randomUUID().toString().toLowerCase(Locale.ROOT));
        docBuilder.add(mappersHandler.map(id));

        JsonParser parser = mapper.getJsonFactory().createJsonParser(new StringReader(body));
        JsonReader jreader = new JsonReader(parser);

        FieldEntry entry;
        while ((entry = jreader.next()) != null) {
            docBuilder.add(mappersHandler.map(entry));
        }

        // the index schema might have changed
        req.updateSchemaToLatest();

        // check that we have seen all the required field mappers
        Set<String> missingRequiredMappers = mappersHandler.getMissingRequiredMappers();
        if (!missingRequiredMappers.isEmpty()) {
            throw new SolrException(BAD_REQUEST,
                    "Document is missing the following required fields: " + missingRequiredMappers);
        }

        // Create and process the Add command
        AddUpdateCommand cmd = new AddUpdateCommand(req);
        cmd.solrDoc = docBuilder.getSolrInputDocument();
        processor.processAdd(cmd);
    } finally {
        IOUtils.closeQuietly(reader);
    }
}

From source file:org.alfresco.solr.AlfrescoCoreAdminTester.java

License:Open Source License

@SuppressWarnings({ "unchecked", "rawtypes" })
private void testQueryByHandler(NamedList report, SolrCore core, String handler, String query, int count,
        String sort, Integer[] sorted, Locale locale, Integer rows, Integer start, ContentStream stream,
        String... filters) throws IOException {
    // TODO: report to rsp

    SolrServletRequest solrReq = null;/*from ww  w .ja  v  a 2  s .com*/
    try {
        NamedList<Object> queryReport = new SimpleOrderedMap<Object>();
        report.add(GUID.generate(), queryReport);
        queryReport.add("Query", query);

        boolean passed = true;
        boolean ordered = true;

        solrReq = new SolrServletRequest(core, null);
        SolrQueryResponse solrRsp = new SolrQueryResponse();
        SolrRequestHandler afts = core.getRequestHandler(handler);

        ModifiableSolrParams newParams = new ModifiableSolrParams(solrReq.getParams());
        newParams.set("alfresco.getSolrDocumentList", true);
        //newParams.set("defType", handler.substring("/".length()));
        newParams.set("q", query);
        newParams.set("fl", "score,DEBID");
        if (rows != null) {
            newParams.set("rows", "" + rows);
            queryReport.add("Rows", rows);
        } else {
            newParams.set("rows", "" + Integer.MAX_VALUE);
        }
        if (start != null) {
            newParams.set("start", "" + start);
            queryReport.add("Start", start);
        }
        if (sort != null) {
            newParams.set("sort", sort);
            queryReport.add("Sort", sort);
        }
        if (locale != null) {
            newParams.set("locale", locale.toString());
            queryReport.add("Locale", locale.toString());
        }
        if (filters != null) {
            for (String filter : filters) {
                if (filter != null) {
                    newParams.add("fq", filter);
                }
            }
            queryReport.add("Filters", filters);
        }
        solrReq.setParams(newParams);

        if (stream != null) {
            ArrayList<ContentStream> streams = new ArrayList<ContentStream>();
            streams.add(stream);
            solrReq.setContentStreams(streams);
            String streamStr = null;
            try (Reader reader = stream.getReader()) {
                streamStr = IOUtils.toString(reader);
            }
            queryReport.add("Stream", streamStr);
        }

        afts.handleRequest(solrReq, solrRsp);

        SolrDocumentList ds = (SolrDocumentList) solrRsp.getValues().get("responseSolrDocumentList");
        if (ds != null) {
            if (ds.size() != count) {
                passed = false;
                ordered = false;
                queryReport.add("Expected", count);
                queryReport.add("Found", ds.size());
            } else {
                queryReport.add("Found", ds.size());
            }

            if (sorted != null) {
                int sz = sorted.length;

                int[] dbids = new int[sz];
                SolrIndexSearcher searcher = solrReq.getSearcher();
                Iterator<SolrDocument> iterator = ds.iterator();
                for (int i = 0; i < sz; i++) {
                    SolrDocument doc = iterator.next();
                    dbids[i] = Integer.valueOf(((IndexableField) doc.getFirstValue("DBID")).stringValue());

                    if (ordered) {
                        if ((sorted[i] != null) && (dbids[i] != sorted[i].intValue())) {

                            ordered = false;
                            queryReport.add("Sort at " + i + " expected", sorted[i]);
                            queryReport.add("Sort at " + i + " found", dbids[i]);
                        }
                    }
                }
                if (ordered) {
                    queryReport.add("Order", "Passed");
                } else {
                    queryReport.add("Order", "FAILED");
                    StringBuilder builder = new StringBuilder();
                    for (int i = 0; i < dbids.length; i++) {
                        if (builder.length() > 0) {
                            builder.append(", ");
                        }
                        builder.append(dbids[i]);
                    }
                    queryReport.add("Sorted as ", builder.toString());
                }
            } else {

            }

            if (passed) {
                queryReport.add("Count", "Passed");
            } else {
                queryReport.add("Count", "FAILED");
            }
        } else {
            queryReport.add("Test", "ERROR");
        }
    } finally {
        if (solrReq != null) {
            solrReq.close();
        }
    }
}