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

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

Introduction

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

Prototype

public SolrQuery addTermsField(String field) 

Source Link

Usage

From source file:com.frank.search.solr.core.TermsQueryParser.java

License:Apache License

protected void appendTermsFieldToSolrQuery(Field field, SolrQuery solrQuery) {
    if (field != null && StringUtils.hasText(field.getName())) {
        solrQuery.addTermsField(field.getName());
    }/*from w  w w .  j  av  a 2 s  .  c o  m*/
}

From source file:com.temenos.interaction.commands.solr.TermsCommand.java

License:Open Source License

public Result execute(InteractionContext ctx) {

    MultivaluedMap<String, String> queryParams = ctx.getQueryParameters();
    String entityName = ctx.getCurrentState().getEntityName();

    try {//from  w w w  .  j a  va2 s . c o  m
        String queryStr = queryParams.getFirst("q");
        SolrQuery query = new SolrQuery();
        query.setRequestHandler("/terms");
        //         query.setFields("id", "name", "mnemonic", "address", "postcode");
        query.setQuery(queryStr);
        // TODO make these configurable
        query.addTermsField("name");
        query.addTermsField("mnemonic");
        query.setTermsPrefix(queryStr);
        query.setTermsSortString("count");
        query.setTerms(true);
        query.setTermsLimit(10);

        QueryResponse rsp = solrServer.query(query);
        ctx.setResource(buildCollectionResource(entityName, "name", rsp.getTermsResponse().getTermMap()));
        return Result.SUCCESS;
    } catch (SolrServerException e) {
        logger.error("An unexpected error occurred while querying Solr", e);
    }

    return Result.FAILURE;
}

From source file:cz.incad.vdk.client.tools.Search.java

License:Open Source License

public JSONArray getSuggest() {
    try {//from www  .  ja v a2s. c  o  m
        String q = req.getParameter("term");
        SolrQuery query = new SolrQuery();
        if (q == null || q.equals("")) {
            return new JSONArray();
        }

        query.setParam(CommonParams.QT, "/terms");
        query.setTerms(true);
        query.setTermsPrefix(q.toUpperCase());
        query.setTermsLowerInclusive(true);
        query.addTermsField("title_suggest");
        JSONArray ja = new JSONObject(IndexerQuery.terms(query)).getJSONObject("terms")
                .getJSONArray("title_suggest");
        JSONArray ret = new JSONArray();
        for (int i = 0; i < ja.length(); i = i + 2) {
            String val = ja.getString(i);
            ret.put(new JSONObject().put("value", val).put("label", val.substring(val.indexOf("##") + 2)));
        }

        return ret;
    } catch (IOException ex) {
        Logger.getLogger(Search.class.getName()).log(Level.SEVERE, null, ex);
        return new JSONArray();
    }
}

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
 * /* www .ja v  a  2s .  c om*/
 * @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;
    }/*www  . j  av  a 2s. c  o  m*/

    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;
    }

}

From source file:org.sleuthkit.autopsy.keywordsearch.TermComponentQuery.java

License:Open Source License

protected SolrQuery createQuery() {
    final SolrQuery q = new SolrQuery();
    q.setRequestHandler(TERMS_HANDLER);//from  w  w w  .  j  a va2 s. c  om
    q.setTerms(true);
    q.setTermsLimit(TERMS_UNLIMITED);
    q.setTermsRegexFlag("case_insensitive"); //NON-NLS
    //q.setTermsLimit(200);
    //q.setTermsRegexFlag(regexFlag);
    //q.setTermsRaw(true);
    q.setTermsRegex(queryEscaped);
    q.addTermsField(TERMS_SEARCH_FIELD);
    q.setTimeAllowed(TERMS_TIMEOUT);

    return q;

}

From source file:org.sleuthkit.autopsy.keywordsearch.TermsComponentQuery.java

License:Open Source License

/**
 * Executes the regex query as a two step operation. In the first step, the
 * Solr terms component is used to find any terms in the index that match
 * the regex. In the second step, term queries are executed for each matched
 * term to produce the set of keyword hits for the regex.
 *
 * @return A QueryResult object or null.
 *
 * @throws NoOpenCoreException//from  w  w  w . j a  v  a2 s.  com
 */
@Override
public QueryResults performQuery() throws KeywordSearchModuleException, NoOpenCoreException {
    /*
     * Do a query using the Solr terms component to find any terms in the
     * index that match the regex.
     */
    final SolrQuery termsQuery = new SolrQuery();
    termsQuery.setRequestHandler(SEARCH_HANDLER);
    termsQuery.setTerms(true);
    termsQuery.setTermsRegexFlag(CASE_INSENSITIVE);
    termsQuery.setTermsRegex(searchTerm);
    termsQuery.addTermsField(SEARCH_FIELD);
    termsQuery.setTimeAllowed(TERMS_SEARCH_TIMEOUT);
    termsQuery.setShowDebugInfo(DEBUG_FLAG);
    termsQuery.setTermsLimit(MAX_TERMS_QUERY_RESULTS);
    List<Term> terms = KeywordSearch.getServer().queryTerms(termsQuery).getTerms(SEARCH_FIELD);
    /*
     * Do a term query for each term that matched the regex.
     */
    QueryResults results = new QueryResults(this, keywordList);
    for (Term term : terms) {
        /*
         * If searching for credit card account numbers, do a Luhn check on
         * the term and discard it if it does not pass.
         */
        if (keyword.getArtifactAttributeType() == ATTRIBUTE_TYPE.TSK_CARD_NUMBER) {
            Matcher matcher = CREDIT_CARD_NUM_PATTERN.matcher(term.getTerm());
            matcher.find();
            final String ccn = CharMatcher.anyOf(" -").removeFrom(matcher.group("ccn"));
            if (false == CREDIT_CARD_NUM_LUHN_CHECK.isValid(ccn)) {
                continue;
            }
        }

        /*
         * Do an ordinary query with the escaped term and convert the query
         * results into a single list of keyword hits without duplicates.
         *
         * Note that the filters field appears to be unused. There is an old
         * comment here, what does it mean? "Note: we can't set filter query
         * on terms query but setting filter query on fileResults query will
         * yield the same result." The filter is NOT being added to the term
         * query.
         */
        String escapedTerm = KeywordSearchUtil.escapeLuceneQuery(term.getTerm());
        LuceneQuery termQuery = new LuceneQuery(keywordList, new Keyword(escapedTerm, true));
        filters.forEach(termQuery::addFilter); // This appears to be unused
        QueryResults termQueryResult = termQuery.performQuery();
        Set<KeywordHit> termHits = new HashSet<>();
        for (Keyword word : termQueryResult.getKeywords()) {
            termHits.addAll(termQueryResult.getResults(word));
        }
        results.addResult(new Keyword(term.getTerm(), false), new ArrayList<>(termHits));
    }
    return results;
}

From source file:peltomaa.sukija.Query.java

License:Open Source License

public void query(String text) {
    try {/*from w ww .  j  a va  2 s.c o  m*/
        SolrQuery query = new SolrQuery();
        query.setQuery(text);
        query.setParam("rows", "1000");
        query.addTermsField("text");
        query.setTerms(true);
        query.setParam("hl.useFastVectorHighlighter", "true");
        query.setParam("hl.mergeContiguous", "true");
        //    query.setParam ("hl.fragsize", "0");
        query.setParam("hl.maxAnalyzedChars", "-1");

        // To choose a different request handler, for example, just set the qt parameter.
        query.set("qt", "/sukija");
        QueryResponse response = server.query(query);

        //    for (String s : query.getTermsFields()) System.out.println ("Field " + s);
        //    QueryResponsePrinter.print (System.out, response);

        SolrDocumentList documents = response.getResults();

        if (documents == null) {
            messageField.setText("Sukija.java: documents == null: ohjelmassa on virhe.");
            System.exit(1);
        }

        setMessage(documents.size());

        if (documents.size() == 0) {
            editorPane.setText("");
        } else {
            editorPane.setText(getText(response));
            editorPane.setCaretPosition(0);
        }
    } catch (SolrServerException ex) {
        messageField.setText(ex.getMessage());
    } catch (Exception ex) {
        messageField.setText(ex.getMessage());
    }
}