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

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

Introduction

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

Prototype

public SolrQuery setQuery(String query) 

Source Link

Usage

From source file:fr.paris.lutece.plugins.search.solr.business.SolrSearchEngine.java

License:Open Source License

/**
* Return search results//from w ww  .  j  a v a 2 s . co  m
* @param strQuery The search query
* @param request The HTTP request
* @return Results as a collection of SearchResult
*/
public List<SearchResult> getSearchResults(String strQuery, HttpServletRequest request) {
    List<SearchResult> results = new ArrayList<SearchResult>();

    SolrClient solrServer = SolrServerService.getInstance().getSolrServer();

    if ((solrServer != null) && !strQuery.equals("")) {
        SolrQuery query = new SolrQuery();

        if ((strQuery != null) && (strQuery.length() > 0)) {
            query.setQuery(strQuery);
        }

        String[] userRoles;
        String[] roles;

        if (SecurityService.isAuthenticationEnable()) {
            // authentification on, check roles
            LuteceUser user = SecurityService.getInstance().getRegisteredUser(request);

            if (user != null) {
                userRoles = SecurityService.getInstance().getRolesByUser(user);
            } else {
                userRoles = new String[0];
            }

            roles = new String[userRoles.length + 1];
            System.arraycopy(userRoles, 0, roles, 0, userRoles.length);
            roles[roles.length - 1] = Page.ROLE_NONE;

            String filterRole = buildFilter(SearchItem.FIELD_ROLE, roles);
            // portlets roles
            //roles[roles.length - 1] = Portlet.ROLE_NONE;

            //String filterPortletRole = buildFilter( SearchItem.FIELD_PORTLET_ROLE, roles );
            query = query.addFilterQuery(filterRole); //.addFilterQuery( filterPortletRole );
        }

        try {
            QueryResponse response = solrServer.query(query);
            SolrDocumentList documentList = response.getResults();
            results = SolrUtil.transformSolrDocumentList(documentList);
        } catch (SolrServerException e) {
            AppLogService.error(e.getMessage(), e);
        } catch (IOException e) {
            AppLogService.error(e.getMessage(), e);
        }
    }

    return results;
}

From source file:fr.xebia.cocktail.CocktailRepository.java

License:Apache License

public Collection<Cocktail> find(@Nullable String ingredient, @Nullable String name) {

    List<String> solrQueryPredicates = Lists.newArrayList();
    if (!Strings.isNullOrEmpty(ingredient)) {
        solrQueryPredicates.add("ingredient:" + ingredient + "*");
    }//w ww  .j  a v a  2 s. c  o m
    if (!Strings.isNullOrEmpty(name)) {
        solrQueryPredicates.add("name:" + name + "*");
    }

    DBCursor cursor;
    if (solrQueryPredicates.isEmpty()) {
        cursor = this.cocktails.find().sort(new BasicDBObject("name", "{x : -1}"));

    } else {
        SolrQuery solrQuery = new SolrQuery();
        String query = Joiner.on(" AND ").join(solrQueryPredicates);
        solrQuery.setQuery(query);
        try {
            QueryResponse solrResponse = solrServer.query(solrQuery);
            logger.trace("Response for {}: {}", query, solrResponse);
            SolrDocumentList docs = solrResponse.getResults();
            if (docs.isEmpty()) {
                return Collections.emptyList();
            }
            Iterable<String> cocktailIds = Iterables.transform(docs, SOLR_DOCUMENT_ID_EXTRACTOR);
            Iterable<DBObject> cocktailsIdsAsDbObjects = Iterables.transform(cocktailIds,
                    BSON_OBJECT_ID_BUILDER);

            cursor = this.cocktails.find(new BasicDBObject("$or", cocktailsIdsAsDbObjects));

            // TODO : ordering

        } catch (SolrServerException e) {
            throw Throwables.propagate(e);
        }
    }

    return Lists.newArrayList(Iterables.transform(cursor, BSON_TO_COCKTAIL));
}

From source file:fr.xebia.cocktail.CocktailRepository.java

License:Apache License

private List<String> suggestCocktailWord(String query, String solrQueryType) {
    query = Strings.nullToEmpty(query);//from w ww  .j a  v  a2  s .co m
    if (query.length() < 2) {
        return Collections.emptyList();
    }

    SolrQuery solrQuery = new SolrQuery();
    solrQuery.setQuery(query);
    solrQuery.setQueryType(solrQueryType);

    List<String> words = Lists.newArrayList();

    try {
        QueryResponse solrResponse = solrServer.query(solrQuery);
        logger.trace("Response for {}: {}", query, solrResponse);
        SpellCheckResponse resp = solrResponse.getSpellCheckResponse();
        List<Suggestion> suggestions = resp.getSuggestions();
        for (Suggestion suggestion : suggestions) {
            words.addAll(suggestion.getAlternatives());
        }
    } catch (SolrServerException e) {
        logger.warn("Silently skip solr exception and return empty result", e);
    }

    return words;
}

From source file:gr.aueb.service.EmailService.java

public static List<Email> getEmails(List<String> keywords) {
    String query = getEmailServiceQuery(keywords);
    SolrQuery solrQuery;
    solrQuery = new SolrQuery();
    if (query.startsWith(" AND")) {
        query = query.substring(4);//from   w  ww. j a  va2  s  .  c om
    }
    if (query.startsWith("AND")) {
        query = query.substring(3);
    }
    solrQuery.setQuery(query);
    if (!query.equals("")) {
        solrQuery.setHighlight(true).setHighlightSnippets(1).setHighlightSimplePost("</strong>")
                .setHighlightSimplePre("<strong>"); //set other params as needed
        solrQuery.setParam("hl.fl", "content_t");
        solrQuery.setParam("hl.requireFieldMatch", "true");

    }

    solrQuery.setRows(15);
    String urlString = "http://195.251.252.8:8983/solr/mail";
    //SolrClient server = new HttpSolrClient.Builder(urlString).build();
    SolrClient server = new HttpSolrClient(urlString);
    QueryResponse response = null;
    try {
        response = server.query(solrQuery);

    } catch (Exception e) {
        System.out.println(e);
    }
    SolrDocumentList rs = response.getResults();
    long numFound = rs.getNumFound();
    int numResultsDisplay = (int) numFound;
    ArrayList<Email> items = new ArrayList<Email>();

    ListIterator<SolrDocument> iter = rs.listIterator();

    while (iter.hasNext()) {
        SolrDocument doc = iter.next();
        String id = doc.get("messageId").toString();
        String from = doc.get("from").toString();
        String sentDate = doc.get("sentDate").toString();
        String subject = doc.get("subject").toString();
        String content = doc.get("content").toString();

        items.add(new Email(id, from, sentDate, subject, content));
    }
    return items;
}

From source file:influent.server.search.SolrEntitySearch.java

License:MIT License

@Override
public FL_SearchResults search(Map<String, List<FL_PropertyMatchDescriptor>> termMap, List<FL_OrderBy> orderBy,
        long start, long max, FL_LevelOfDetail lod) throws AvroRemoteException {

    ArrayList<FL_SearchResult> results = new ArrayList<FL_SearchResult>();
    SolrEntitySearchIterator ssr;/*from   w  w w. j a v a 2  s . com*/

    // Form the query
    String searchStr = SearchSolrHelper.toSolrQuery(termMap, getDescriptors(), getPropertyFieldProvider());

    // issue the query
    SolrQuery query = new SolrQuery();
    query.setQuery(searchStr);
    query.setFields("*", "score");

    // form a union of sort by fields for all types
    orderBy = PropertyDescriptorHelper.mapOrderBy(orderBy, getDescriptors().getProperties(), termMap.keySet());

    if (orderBy != null) {
        for (FL_OrderBy ob : orderBy) {
            String key = (ob.getPropertyKey().equals(FL_ReservedPropertyKey.MATCH.name())) ? "score"
                    : ob.getPropertyKey();

            query.addSortField(key, ob.getAscending() ? ORDER.asc : ORDER.desc);
        }
    }

    ssr = buildSolrEntitySearchIterator(getNamespaceHandler(), _solr, query, _config, lod,
            _applicationConfiguration, getPropertyFieldProvider());

    if (start >= 0) {
        ssr.setStartIndex((int) start);
    }
    if (max > 0) {
        ssr.setMaxResults((int) max);
    }

    // Add results from the matching documents
    while (ssr.hasNext()) {
        FL_SearchResult fsr = ssr.next();
        results.add(fsr);
    }

    return FL_SearchResults.newBuilder().setTotal(ssr.getTotalResults()).setResults(results)
            .setLevelOfDetail(lod).build();
}

From source file:influent.server.search.SolrLinkSearch.java

License:MIT License

@Override
public FL_SearchResults search(Map<String, List<FL_PropertyMatchDescriptor>> termMap, List<FL_OrderBy> orderBy,
        long start, long max, FL_LevelOfDetail levelOfDetail) throws AvroRemoteException {
    ArrayList<FL_SearchResult> results = new ArrayList<FL_SearchResult>();
    SolrLinkSearchIterator ssr;//from  ww  w.j a v  a 2 s  .c  o  m

    try {
        List<String> ids = new ArrayList<String>();

        // Collect all the ids, for mapping later
        for (Map.Entry<String, List<FL_PropertyMatchDescriptor>> entry : termMap.entrySet()) {
            List<FL_PropertyMatchDescriptor> termsByType = entry.getValue();
            for (FL_PropertyMatchDescriptor term : termsByType) {

                // Find keys that are built in ID types for transactions
                if (term.getKey().equals(FL_RequiredPropertyKey.FROM.name())
                        || term.getKey().equals(FL_RequiredPropertyKey.TO.name())
                        || term.getKey().equals(FL_RequiredPropertyKey.ENTITY.name())
                        || term.getKey().equals(FL_RequiredPropertyKey.LINKED.name())) {

                    // Strip out the native ID
                    Object range = term.getRange();
                    if (range instanceof FL_SingletonRange) {
                        String val = (String) SingletonRangeHelper.value(range);
                        ids.add(val);
                    } else if (range instanceof FL_ListRange) {

                        List<Object> values = ((FL_ListRange) range).getValues();
                        List<Object> values2 = new ArrayList<Object>();
                        for (Object obj : values) {
                            String val = (String) obj;
                            values2.add(val);
                            ids.add(val);
                        }
                    }
                }
            }
        }

        // Form the query
        String searchStr = SearchSolrHelper.toSolrQuery(termMap, getDescriptors(), getPropertyFieldProvider());

        // issue the query
        SolrQuery query = new SolrQuery();
        query.setQuery(searchStr);
        query.setFields("*", "score");

        String solrGroupField = getDescriptors().getGroupField();
        if (solrGroupField != null) {
            query.setParam("group", true);
            query.setParam("group.field", solrGroupField);
            query.setParam("group.limit", levelOfDetail == FL_LevelOfDetail.FULL ? "-1" : "3");
            query.setParam("group.ngroups", true);
        }

        // form a union of sort by fields for all types
        orderBy = PropertyDescriptorHelper.mapOrderBy(orderBy, getDescriptors().getProperties(),
                termMap.keySet());

        if (orderBy != null) {
            for (FL_OrderBy ob : orderBy) {
                String key = (ob.getPropertyKey().equals(FL_ReservedPropertyKey.MATCH.name())) ? "score"
                        : ob.getPropertyKey();

                query.addSortField(key, ob.getAscending() ? ORDER.asc : ORDER.desc);
            }
        }

        ssr = buildSolrLinkSearchIterator(getNamespaceHandler(), _solr, query, _config, levelOfDetail,
                _applicationConfiguration, getPropertyFieldProvider());

        if (start >= 0) {
            ssr.setStartIndex((int) start);
        }
        if (max > 0) {
            ssr.setMaxResults((int) max);
        }

        // Add results from the matching documents
        while (ssr.hasNext()) {
            FL_SearchResult fsr = ssr.next();
            results.add(fsr);
        }

    } catch (Exception e) {
        throw new AvroRemoteException(e);
    }

    return FL_SearchResults.newBuilder().setTotal((long) ssr.getTotalResults()).setResults(results)
            .setLevelOfDetail(levelOfDetail).build();
}

From source file:info.papyri.dispatch.atom.AtomFeedServlet.java

License:Creative Commons License

/** 
 * Assigns the passed parameter values into a SolrQuery object.
 * //from  w  w  w  . j a va 2  s .co m
 * Note that if any single passed date cannot be parsed, a parse exception
 * will be thrown and the query abandoned.
 * 
 * @param dateParams
 * @param page
 * @return
 * @throws ParseException 
 */

SolrQuery buildSolrQuery(EnumMap<TimeParam, String> dateParams, int page, SearchType searchType)
        throws ParseException {

    SolrQuery sq = new SolrQuery();
    String q = "";
    sq.addSortField(searchType.getDateField().name(), SolrQuery.ORDER.desc);
    sq.setRows(entriesPerPage);
    sq.setStart((page - 1) * entriesPerPage);

    for (Map.Entry<TimeParam, String> entry : dateParams.entrySet()) {

        String rangeString = generateRangeString(entry.getKey(), entry.getValue());
        if (!"".equals(q))
            q += " AND ";
        q += searchType.getDateField().name() + ":" + rangeString;

    }

    if (q.equals(""))
        q = searchType.getDateField().name() + ":[* TO *]";
    sq.setQuery(q);
    return sq;

}

From source file:io.vertigo.dynamo.plugins.search.solr.SolrStatement.java

License:Apache License

/**
 * @return Nombre de document indexs//from ww w .  j a  va 2s  .c  o  m
 */
public long count() {
    final SolrQuery solrQuery = new SolrQuery();
    solrQuery.set(CommonParams.ROWS, 0);
    solrQuery.setQuery("*:*");
    final QueryResponse queryResponse = executeQuery(solrQuery);
    return queryResponse.getResults().getNumFound();
}

From source file:io.vertigo.dynamo.plugins.search.solr.SolrStatement.java

License:Apache License

private static SolrQuery createSolrQuery(final SearchQuery searchQuery,
        final IndexFieldNameResolver indexFieldNameResolver, final FacetedQuery filtersQuery,
        final int rowsPerQuery) {
    final SolrQuery solrQuery = new SolrQuery();
    solrQuery.set(CommonParams.ROWS, rowsPerQuery);
    solrQuery.setFields(SolrDocumentCodec.URN, SolrDocumentCodec.FULL_RESULT);
    if (searchQuery.isSortActive()) {
        final DtField sortField = searchQuery.getIndexDefinition().getIndexDtDefinition()
                .getField(searchQuery.getSortField());
        final String indexSortFieldName = indexFieldNameResolver.obtainIndexFieldName(sortField);
        solrQuery.addSortField(indexSortFieldName, searchQuery.getSortAsc() ? ORDER.asc : ORDER.desc);
    }//ww w.j  a  v  a2s  . com
    //solrQuery.set(CommonParams.START, 0); //peut servir d'offset
    final StringBuilder query = new StringBuilder();
    if (searchQuery.isBoostMostRecent()) {
        appendBoostMostRecent(searchQuery, query);
    }
    query.append(translateToSolr(searchQuery.getListFilter(), indexFieldNameResolver));
    solrQuery.setQuery(query.toString());

    for (final ListFilter facetQuery : filtersQuery.getListFilters()) {
        solrQuery.addFilterQuery(translateToSolr(facetQuery, indexFieldNameResolver));
    }
    solrQuery.setHighlight(true);
    solrQuery.setParam("hl.fl", "*");
    solrQuery.setHighlightSnippets(3);
    solrQuery.setParam("hl.mergeContiguous", true);
    //Ci dessous : pour avoir les facettes avec un compteur de doc  0
    //Pour l'instant dsactiv car elles peuvent tre dduites des dfinitions de facettes sauf pour celles tires des mots du dictionnaires dont on ne maitrise pas la quantit
    //solrQuery.setParam("facet.missing", true);

    return solrQuery;
}

From source file:it.damore.solr.importexport.App.java

License:Open Source License

/**
 * @param client//from  ww  w . j a v a 2 s .  com
 * @param outputFile
 * @throws SolrServerException
 * @throws IOException
 */
private static void readAllDocuments(HttpSolrClient client, File outputFile)
        throws SolrServerException, IOException {

    SolrQuery solrQuery = new SolrQuery();
    solrQuery.setQuery("*:*");
    if (config.getFilterQuery() != null) {
        solrQuery.addFilterQuery(config.getFilterQuery());
    }
    solrQuery.setRows(0);

    solrQuery.addSort(config.getUniqueKey(), ORDER.asc); // Pay attention to this line

    String cursorMark = CursorMarkParams.CURSOR_MARK_START;

    TimeZone.setDefault(TimeZone.getTimeZone("UTC"));

    // objectMapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, true);
    DateFormat df = new SimpleDateFormat("YYYY-MM-dd'T'HH:mm:sss'Z'");
    objectMapper.setDateFormat(df);
    objectMapper.configure(SerializationFeature.ORDER_MAP_ENTRIES_BY_KEYS, true);

    QueryResponse r = client.query(solrQuery);

    long nDocuments = r.getResults().getNumFound();
    logger.info("Found " + nDocuments + " documents");

    if (!config.getDryRun()) {
        logger.info("Creating " + config.getFileName());

        Set<SkipField> skipFieldsEquals = config.getSkipFieldsSet().stream()
                .filter(s -> s.getMatch() == MatchType.EQUAL).collect(Collectors.toSet());
        Set<SkipField> skipFieldsStartWith = config.getSkipFieldsSet().stream()
                .filter(s -> s.getMatch() == MatchType.STARTS_WITH).collect(Collectors.toSet());
        Set<SkipField> skipFieldsEndWith = config.getSkipFieldsSet().stream()
                .filter(s -> s.getMatch() == MatchType.ENDS_WITH).collect(Collectors.toSet());

        try (PrintWriter pw = new PrintWriter(outputFile)) {
            solrQuery.setRows(200);
            boolean done = false;
            while (!done) {
                solrQuery.set(CursorMarkParams.CURSOR_MARK_PARAM, cursorMark);
                QueryResponse rsp = client.query(solrQuery);
                String nextCursorMark = rsp.getNextCursorMark();

                for (SolrDocument d : rsp.getResults()) {
                    skipFieldsEquals.forEach(f -> d.removeFields(f.getText()));
                    if (skipFieldsStartWith.size() > 0 || skipFieldsEndWith.size() > 0) {
                        Map<String, Object> collect = d.entrySet().stream()
                                .filter(e -> !skipFieldsStartWith.stream()
                                        .filter(f -> e.getKey().startsWith(f.getText())).findFirst()
                                        .isPresent())
                                .filter(e -> !skipFieldsEndWith.stream()
                                        .filter(f -> e.getKey().endsWith(f.getText())).findFirst().isPresent())
                                .collect(Collectors.toMap(e -> e.getKey(), e -> e.getValue()));
                        pw.write(objectMapper.writeValueAsString(collect));
                    } else {
                        pw.write(objectMapper.writeValueAsString(d));
                    }
                    pw.write("\n");
                }
                if (cursorMark.equals(nextCursorMark)) {
                    done = true;
                }

                cursorMark = nextCursorMark;
            }

        }
    }

}