Example usage for org.apache.solr.client.solrj SolrQuery setRequestHandler

List of usage examples for org.apache.solr.client.solrj SolrQuery setRequestHandler

Introduction

In this page you can find the example usage for org.apache.solr.client.solrj SolrQuery setRequestHandler.

Prototype

public SolrQuery setRequestHandler(String qt) 

Source Link

Document

The Request Handler to use (see the solrconfig.xml), which is stored in the "qt" parameter.

Usage

From source file:ddf.catalog.source.solr.DynamicSchemaResolver.java

License:Open Source License

/**
 * Adds the fields that are already in the server to the cache. This method should be called
 * once the SolrServer is up to ensure the cache is synchronized with the server.
 *
 * @param server//from  www.j  a  va  2s  .c o  m
 *            the SolrServer we are working with
 */
public void addFieldsFromServer(SolrServer server) {
    if (server == null) {
        LOGGER.warn("Server is null, could not add fields to cache.");
        return;
    }

    SolrQuery query = new SolrQuery();

    // numterms=0 means retrieve everything (regular or dynamic fields)
    query.add("numterms", "0");

    /*
     * Adding this request handler allows us to query the schema dynamically. The name of the
     * request handler is provided by the schema.xml. If the name is changed in the schema.xml,
     * then this value must be changed as well.
     */
    query.setRequestHandler("/admin/luke");

    try {
        QueryResponse response = server.query(query);
        for (Entry<String, ?> e : ((SimpleOrderedMap<?>) (response.getResponse().get(FIELDS_KEY)))) {
            fieldsCache.add(e.getKey());
        }
    } catch (SolrServerException | SolrException e) {
        LOGGER.warn("Could not update cache for field names.", e);
    }
}

From source file:de.hebis.it.hds.gnd.out.AutorityRecordSolrFinder.java

License:Open Source License

/**
 * Do real time get./*  w ww  .j  a  v  a  2s  .c  om*/
 *
 * @param documentId the id of the authority record
 * @return a authority bean representing the authority record or null if the id does not exist.
 * @throws AuthorityRecordException
 */
private AuthorityBean doRealTimeGet(String documentId) throws AuthorityRecordException {
    QueryResponse response = null;
    SolrQuery rtg_query = new SolrQuery();
    rtg_query.setRequestHandler("/get");
    rtg_query.set("fl", "fullrecord");
    rtg_query.setFields("id", "preferred", "synonyms");
    rtg_query.set("id", documentId);
    try {
        response = server.query(rtg_query);
        if (response.getStatus() != 0)
            throw new SolrServerException("Response state: " + response.getStatus());
    } catch (SolrServerException | IOException e) {
        e.printStackTrace();
        throw new AuthorityRecordException("Solr query \"" + rtg_query.toString() + "\" can't be executed.", e);
    }
    // Workaround: RTG does not allow to call response.getBeans(AuthorityBean.class);
    NamedList<Object> result = response.getResponse();
    if (result == null)
        throw new AuthorityRecordException("Solr query \"" + rtg_query.toString() + "\" has no result.");
    SolrDocument doc = (SolrDocument) result.get("doc");
    if ((doc == null) || (doc.size() == 0)) {
        if (LOG.isDebugEnabled())
            LOG.debug("Solr query \"" + rtg_query.toString() + "\" No doc found.");
        return null;
    }
    return documentObjectBinder.getBean(AuthorityBean.class, doc);
}

From source file:edu.ub.ir.oof1.service.Solr.java

/**
 * Used only for searching a single news article
 *
 * @param _query/*from ww  w.  j ava  2  s .  com*/
 * @param resultType
 * @return
 */
@Override
public List<AbstractModel> query(String _query, Class<? extends AbstractModel> resultType) {
    List<AbstractModel> out = new ArrayList<AbstractModel>();

    SolrQuery query = new SolrQuery();
    query.setQuery(_query);
    query.setRequestHandler(Properties.SOLR_QUERY_HANDLER);

    try {
        QueryResponse response = SERVER.query(query);
        SolrDocumentList docs = response.getResults();
        for (SolrDocument doc : docs) {
            AbstractModel model = null;

            String news_id = (String) doc.getFieldValue("news_id");
            //System.out.println("news_id : " + news_id);
            //System.out.println("highlighting : " + response.getHighlighting().get(news_id));
            if (news_id != null && response.getHighlighting().get(news_id) != null) {
                model = getModelForSolrDoc(doc, resultType, response.getHighlighting().get(news_id));
            } else {
                model = getModelForSolrDoc(doc, resultType);
            }

            out.add(model);
        }
    } catch (Exception e) {
        e.printStackTrace();
    }

    return out;
}

From source file:edu.ub.ir.oof1.service.Solr.java

/**
 * Used only for searching a single news article
 *
 * @param _query//  w  ww  .j  a va  2  s. c  om
 * @return
 */
public Suggestions getAutoSuggest(String _query) {
    Suggestions out = new Suggestions();
    List<String> suggs = new ArrayList<String>();
    System.out.println("Solr query : " + _query);
    SolrQuery query = new SolrQuery();
    query.setQuery(_query);
    query.setRequestHandler(Properties.SOLR_AUTO_SUGGEST_HANDLER);

    try {
        QueryResponse response = SERVER.query(query);
        suggs = spellcheck(response);
        System.out.println("Solr sugg : " + suggs);
        out.setSuggestions(suggs);
    } catch (Exception e) {
        e.printStackTrace();
    }
    System.out.println("Final Solr: " + out);
    return out;
}

From source file:edu.ub.ir.oof1.service.Solr.java

/**
 * Used for searching multiple news articles
 *
 * @param _query//from   w ww . j  a  v  a 2 s  .  c o m
 * @param resultType
 * @param _user_id
 * @return
 */
@Override
public NewsResults query(String _query, Class<? extends AbstractModel> resultType, String _user_id) {

    List<News> out = new ArrayList<News>();
    List<String> spellCheck = new ArrayList<String>();

    boolean queryBack = false;

    SolrQuery query = new SolrQuery();
    query.setQuery(_query + " AND " + _user_id);
    query.setRequestHandler(Properties.SOLR_QUERY_HANDLER);

    try {
        QueryResponse response = SERVER.query(query);
        SolrDocumentList docs = response.getResults();
        System.out.println("***Before queryBack***");
        queryBack = queryConstruct(docs, out, _user_id, response, resultType);

        if (queryBack) {
            System.out.println("Entered queryback");
            query = new SolrQuery();
            query.setQuery(_query + " NOT " + _user_id);
            query.setRequestHandler(Properties.SOLR_QUERY_HANDLER);

            response = SERVER.query(query);
            docs = response.getResults();
            queryBack = queryConstruct(docs, out, _user_id, response, resultType);

            if (queryBack) {
                query = new SolrQuery();
                query.setQuery(_query);
                query.setRequestHandler("/spellcheck");

                response = SERVER.query(query);
                spellCheck = spellcheck(response);
            }
        }

    } catch (Exception e) {
        e.printStackTrace();
    }

    return new NewsResults(out, spellCheck);
}

From source file:edu.ub.ir.oof1.service.Solr.java

public void updateDocClick(String _user_id, String _news_id) {
    try {/*from   w  ww.  j ava2s  .  c om*/

        SolrInputDocument updateDoc = new SolrInputDocument();
        SolrQuery query = new SolrQuery();
        query.setQuery("news_id:" + _news_id);
        query.setRequestHandler(Properties.SOLR_QUERY_HANDLER);

        QueryResponse response = SERVER.query(query);
        SolrDocumentList docs = response.getResults();
        if (docs == null) {
            return;
        }
        if (docs.size() < 1) {
            return;
        }
        for (String attribute : docs.get(0).getFieldNames()) {
            //Retain all the records except userCount and Count
            if (!attribute.equals("user_count") && !attribute.equals("count") && !attribute.equals("score")
                    && !attribute.equals("_version_")) {
                updateDoc.addField(attribute, docs.get(0).getFieldValue(attribute));
            } else if (attribute.equals("user_count")) {
                List<String> userCount = (List<String>) docs.get(0).getFieldValue("user_count");
                List<String> updatedCount = new ArrayList<String>();
                boolean userFound = false;

                if (userCount != null && userCount.size() > 0) {
                    for (String user : userCount) {
                        String[] buffer = user.split(":");
                        if (buffer.length > 1) {
                            if (buffer[0].equals(_user_id)) {
                                int count = Integer.parseInt(buffer[1]);
                                updatedCount.add(buffer[0] + ":" + ++count);
                                userFound = true;
                            } else {
                                //This is not the user who read this article at the moment
                                updatedCount.add(user);
                            }
                        } else {
                            //Means this user is reading this article for the first time or
                            //This is the first time any user is reading this article
                            userFound = true;
                            updatedCount.add(_user_id + ":" + 1);
                        }
                    }

                    if (userFound == false) //Means this user is reading this article for the first time
                    {
                        updatedCount.add(_user_id + ":" + 1);
                    }
                } else {
                    //This logic will not happen in real time. Added for worst-case scenario
                    updatedCount.add(_user_id + ":" + 1);
                }

                updateDoc.addField("user_count", updatedCount);
            } else if (attribute.equals("count")) {
                //Increment the global count for this article.
                //Used to track the most viewed articles irrespective of the user
                Map<String, Integer> countIncMap = new HashMap<String, Integer>(1);
                countIncMap.put("inc", 1);

                updateDoc.addField("count", countIncMap);
            }
        }
        SERVER.add(updateDoc);
        SERVER.commit();
    } catch (Exception e) {
        e.printStackTrace();
    }
}

From source file:eu.europeana.suggest.QueryCompletionClient.java

License:Apache License

public Response getCompletions(String query, int n, String language, boolean addExplain)
        throws SolrServerException {

    if (language == null || language.isEmpty()) {
        logger.info("no language for query {}, using default English. ", language, query);
        return getCompletions(query, n);
    }//from  w w w .  ja v  a2s.  c om

    language = language.toLowerCase();

    if (!language.contains(language)) {
        logger.info("unknown language {} for query {}, using default English. ", language, query);
        language = "en";
    }

    SolrQuery sq = new SolrQuery(query);
    if (language.equals("en")) {
        sq.setRequestHandler("/suggest");
    } else {
        sq.setRequestHandler("/" + language + "_suggest");
    }
    // set the results number
    sq.setRows(n);
    if (addExplain) {
        // if requested add the explain (how the score is computed) to the
        // results, used in the logging
        sq.setFields("*", "[explain]");
    }
    // send the query to the server, each document returned is an entity
    QueryResponse qr = server.query(sq);
    SolrDocumentList sdl = qr.getResults();

    Response result = new Response(query);

    result.setItemCount(n);
    result.setTotalResults(sdl.getNumFound());
    result.setLanguage(language);

    List<Suggestion> annotations = new ArrayList<Suggestion>();
    for (SolrDocument sd : sdl) {
        Suggestion annotation = new Suggestion();
        String enTitle = (decode((String) sd.get("en_title")));
        // short titles usually are not really relevant and have high
        // ranking since they are ambigous.. remove them :)
        if (enTitle.length() <= 5)
            continue;
        int wikipediaClicks = ((Integer) sd.get("wikipedia_clicks"));
        int europeanaDf = ((Integer) sd.get("europeana_df"));
        int enrichment = ((Integer) sd.get("enrichment"));
        String type = (decode((String) sd.get("type"))).toLowerCase();
        annotation.setType(type);
        annotation.addPrefLabel("en", enTitle);
        annotation.setEuropeana_df(europeanaDf);
        annotation.setWikipedia_clicks(wikipediaClicks);
        annotation.setEnrichment(enrichment);
        if (addExplain) {
            annotation.setExplain((String) sd.get("[explain]"));
        }

        for (String lang : languages) {
            String label = decode((String) sd.get(lang + "_title"));

            if (label == null || label.isEmpty())
                continue;
            // if (label == null || label.isEmpty()) {
            // label = enTitle;
            //
            // }
            annotation.addPrefLabel(lang, label);
        }
        annotation.setUri((String) sd.get("uri"));
        annotation.setImage(((String) sd.get("uri")).replace("http://dbpedia.org/resource/",
                "http://wikiname2image.herokuapp.com/"));
        annotation.setUri(annotation.getUri().replace("http://dbpedia.org/resource/",
                "http://data.europeana.eu/" + type + "/"));
        annotation.setSearch("entity:" + annotation.getUri());
        annotations.add(annotation);
    }
    result.setSuggestions(annotations);

    return result;

}

From source file:eumetsat.pn.solr.webapp.SolrApp.java

@Override
protected Map<String, Object> describeProduct(String id) throws MalformedURLException, ParseException {
    Map<String, Object> data = new HashMap<>();
    //URL url = new URL(this.productEndpointUrlString + "?" + id);

    SolrQuery query = new SolrQuery();
    query.setRequestHandler(productEndpointUrlString);
    query.set("id", id);
    query.setFields("*");
    log.trace("Solr query: {}", query);

    try {//w  w w  .  ja  v a  2  s  .  co  m
        QueryResponse response = solr.query(query);

        SolrDocument result = (SolrDocument) response.getResponse().get("doc");
        log.trace("Result document: {}", result);

        data.put("id", result.getFieldValue("id"));
        data.put("title", result.getFieldValue("title"));
        data.put("abstract", result.getFieldValue("description"));

        if (result.getFieldValue("thumbnail_s") != null) {
            data.put("thumbnail", result.getFieldValue("thumbnail_s"));
        }
        if (result.getFieldValue("status_s") != null) {
            data.put("status", result.getFieldValue("status_s"));
        }
        if (result.getFieldValue("satellite_s") != null) {
            data.put("satellite", result.get("satellite_s"));
        }
        if (result.getFieldValue("keywords") != null) {
            data.put("keywords", Joiner.on(", ").join((Collection<String>) result.get("keywords")));
        }
        if (result.getFieldValue("distribution_ss") != null) {
            data.put("distribution", Joiner.on(", ").join((Collection<String>) result.get("distribution_ss")));
        }
        if (result.getFieldValue("category") != null) {
            data.put("category", Joiner.on(", ").join((Collection<String>) result.getFieldValue("category")));
        }
        if (result.getFieldValue("instrument_s") != null) {
            data.put("instrument", result.getFieldValue("instrument_s"));
        }
        if (result.getFieldValue("boundingbox") != null) {
            data.put("boundingbox", result.getFieldValue("boundingbox"));
        }
        if (result.getFieldValue("address_s") != null) {
            data.put("address", result.getFieldValue("address_s"));
        }
        if (result.getFieldValue("email_s") != null) {
            data.put("email", result.getFieldValue("email_s"));
        }
        if (result.getFieldValue("societalBenefitArea_ss") != null) {
            data.put("sba",
                    Joiner.on(", ").join((Collection<String>) result.getFieldValue("societalBenefitArea_ss")));
        }
        if (result.getFieldValue("xmldoc") != null) {
            data.put("xmldoc", result.getFieldValue("xmldoc"));
        }
    } catch (SolrServerException e) {
        log.error("Error querying Solr", e);
        addMessage(data, MessageLevel.danger, "Error during search: " + e.getMessage());
        //            errorResponse(e);
    }
    return data;
}

From source file:fr.cnes.sitools.metacatalogue.resources.opensearch.OpensearchDescribeResource.java

License:Open Source License

/**
 * Create a description for the metacatalogue containing all the request parameters, their types and enumeration
 * /*ww w  . ja  v a 2s  . c o  m*/
 * @return a description for the metacatalogue
 */
private Describe createDescribe() {
    Describe describe = new Describe();
    SolrServer server = SolRUtils.getSolRServer(solrCoreUrl);
    if (server == null) {
        throw new ResourceException(Status.SERVER_ERROR_INTERNAL,
                "Solr core : " + solrCoreUrl + " not reachable");
    }

    LukeRequest request = new LukeRequest();
    // request.setNumTerms(maxTopTerms);

    try {
        List<Filter> filters = new ArrayList<Filter>();
        LukeResponse response = request.process(server);
        int numDocs = response.getNumDocs();

        Map<String, LukeResponse.FieldInfo> fields = response.getFieldInfo();

        for (Entry<String, LukeResponse.FieldInfo> field : fields.entrySet()) {
            LukeResponse.FieldInfo fieldInfo = field.getValue();
            String fieldName = fieldInfo.getName();

            boolean indexed = false;

            EnumSet<FieldFlag> flags = FieldInfo.parseFlags(fieldInfo.getSchema());
            indexed = (flags != null && flags.contains(FieldFlag.INDEXED));

            if (indexed && addToDescription(fieldName)) {

                // make a terms query to get the top terms
                SolrQuery query = new SolrQuery();
                query.setRequestHandler("/terms");
                query.setTerms(true);
                query.addTermsField(fieldName);
                query.setTermsLimit(maxTopTerms);
                query.setTermsMinCount(1);

                QueryRequest termsRequest = new QueryRequest(query);
                TermsResponse termsResponse = termsRequest.process(server).getTermsResponse();

                List<Term> terms = termsResponse.getTerms(fieldName);

                Filter filter = new Filter();
                filter.setId(fieldName);
                filter.setTitle(fieldName);
                if (canBeCategorised(terms)) {
                    filter.setType(FilterType.enumeration);
                    filter.setPopulation(numDocs);
                    filter.setSon(createSons(terms));
                } else {
                    filter.setType(getFilterType(fieldInfo.getType()));
                }
                filters.add(filter);
            }
        }
        describe.setFilters(filters);
        return describe;
    } catch (SolrServerException e) {
        throw new ResourceException(Status.SERVER_ERROR_INTERNAL, e.getMessage(), e);
    } catch (IOException e) {
        throw new ResourceException(Status.SERVER_ERROR_INTERNAL, e.getMessage(), e);
    }
}

From source file:fr.cnes.sitools.metacatalogue.resources.suggest.OpensearchSuggestResource.java

License:Open Source License

@Get
public List<SuggestDTO> suggest(Variant variant) {
    String query = getRequest().getResourceRef().getQueryAsForm().getFirstValue("q");
    if (query == null || query.isEmpty()) {
        getResponse().setStatus(Status.CLIENT_ERROR_BAD_REQUEST, "No suggestion parameter");
        return null;
    }/* ww  w.  j  a  v  a 2 s .  com*/

    try {
        ThesaurusSearcher searcher = new ThesaurusSearcher(thesaurusName);
        List<SuggestDTO> suggests = new ArrayList<SuggestDTO>();

        List<Concept> concepts = searcher.searchNarrowersBroader(query + "*", getLanguage());
        for (Concept concept : concepts) {
            SuggestDTO suggestDTO = new SuggestDTO();
            suggestDTO.setSuggestion(concept.getProperties().get("prefLabelNarrower").toString());
            suggestDTO.setSuggestionAltLabel(concept.getProperties().get("altLabelNarrower").toString());
            suggests.add(suggestDTO);
        }

        // get suggestion number in the metacatalogue then
        if (suggests.size() > 0) {
            SolrServer server = getSolrServer(getContext());

            SolrQuery solrQuery = new SolrQuery();
            solrQuery.setRequestHandler("/terms");
            solrQuery.setTerms(true);
            solrQuery.setTermsLimit(-1);
            solrQuery.addTermsField(MetacatalogField._CONCEPTS.getField());

            QueryResponse rsp;
            try {
                QueryRequest request = new QueryRequest(solrQuery);
                rsp = request.process(server);
                TermsResponse termsResponse = rsp.getTermsResponse();
                List<TermsResponse.Term> terms = termsResponse.getTerms(MetacatalogField._CONCEPTS.getField());
                Map<String, Long> map = createMapFromTerms(terms);
                Long nb = null;
                for (SuggestDTO suggest : suggests) {
                    if (map != null) {
                        nb = map.get(suggest.getSuggestionAltLabel());
                    }
                    if (nb == null) {
                        suggest.setNb(0);
                    } else {
                        suggest.setNb(nb);
                    }
                }
            } catch (SolrServerException e) {
                getLogger().warning("Cannot access Solr server no suggestion number returned");
            }
        }

        return suggests;
    } catch (IOException e) {
        getResponse().setStatus(Status.SERVER_ERROR_INTERNAL, "Cannot read Thesaurs : " + thesaurusName);
        return null;
    }

}