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

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

Introduction

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

Prototype

public SolrQuery setSort(String field, ORDER order) 

Source Link

Document

Replaces the current sort information with a single sort clause

Usage

From source file:com.comm.sr.common.solr.SolrQueryGenerator.java

@Override
public SolrQuery generateFinalQuery(SolrCommonQuery query_) {
    SolrQuery solrQuery = new SolrQuery();
    solrQuery.setParam("collection", query_.getCollectionName());
    SubQuery query = query_.getSubQuery();
    if (query == null) {
        return solrQuery;
    }//from   w ww .  j  av a2 s.c o  m
    StringBuffer solrQueryBuffer = new StringBuffer();
    makeFinalSolrQuery(query, solrQueryBuffer);

    int pageNum = query_.getPageNum();
    if (pageNum < 1) {
        // default first page
        pageNum = 1;
    } else {
        pageNum = query_.getPageNum();
    }
    List<SortItem> sortItems = query_.getSortItems();
    if (sortItems == null) {
        sortItems = Lists.newArrayList();
    }
    for (String functionQueryString : query_.getFunctionQuerysList()) {

        solrQueryBuffer.append("_query_:\"{!func}" + functionQueryString + "\"" + " AND ");

    }
    if (solrQueryBuffer.toString().contains("AND")) {

        int and = solrQueryBuffer.lastIndexOf("AND");
        solrQueryBuffer.replace(and, and + 3, "");
    }
    if (solrQueryBuffer.toString().trim().length() == 0) {
        solrQueryBuffer.append("*:*");
    }
    for (SortItem sortItem : sortItems) {
        String fieldName = sortItem.getFieldName();
        String order = sortItem.getSort();

        if (order == null) {
            LOGGER.info("ingore sort fieldName:" + fieldName + ", please configure it.");
            continue;
        }
        if (order.trim().equals("asc")) {
            solrQuery.setSort(fieldName, SolrQuery.ORDER.asc);
        }
        if (order.trim().equals("desc")) {
            solrQuery.addSort(fieldName, SolrQuery.ORDER.desc);

        }

    }

    for (String fl : query_.getFls()) {
        solrQuery.addField(fl);

    }
    int pageSize = query_.getPageSize();
    solrQuery.add("start", String.valueOf((pageNum - 1) * pageSize));
    solrQuery.add("rows", String.valueOf(pageSize));

    // if have distance query
    // fq=_query_:%22{!geofilt}%22&sfield=location&pt=45.15,-93.85&d=50000&sort=geodist()%20asc&fl=score,geodist(),location
    String location = query_.getLocationPoint();
    Double distance = query_.getDistance();

    if (location != null && distance != null) {
        solrQuery.add("d", distance.toString());
        solrQuery.add("pt", location);
        solrQuery.add("sfield", "location");
        solrQuery.add("fq", "_query_:{!geofilt}");
        solrQuery.addSort("geodist()", SolrQuery.ORDER.asc);

    }
    LOGGER.info(solrQueryBuffer.toString());
    solrQuery.setQuery(solrQueryBuffer.toString());

    return solrQuery;
}

From source file:com.comm.sr.service.solr.SolrQueryGenerator.java

@Override
public SolrQuery generateFinalQuery(CommonQuery query) {
    SolrQuery solrQuery = new SolrQuery();
    StringBuilder queryStr = new StringBuilder();
    StringBuilder filterQueryStr = new StringBuilder();

    int pageNum = query.getPageNum();
    if (pageNum < 1) {
        // default first page
        pageNum = 1;/*from   w  w  w.  j  av  a2  s.c o m*/
    } else {
        pageNum = query.getPageNum();
    }
    List<QueryItem> queryItems = query.getQueryItems();
    if (queryItems == null) {
        queryItems = Lists.newArrayList();
    }

    List<SortItem> sortItems = query.getSortItems();
    if (sortItems == null) {
        sortItems = Lists.newArrayList();
    }
    for (QueryItem queryItem : queryItems) {
        if (queryItem.isIsFilterType()) {
            String temp = generateQueryStrFromQueryItem(queryItem);
            if (temp != null) {
                filterQueryStr.append(temp + " AND ");

            }
        }
        if (!queryItem.isIsFilterType()) {
            String temp = generateQueryStrFromQueryItem(queryItem);
            if (temp != null) {
                queryStr.append(temp + " AND ");

            }
        }

    }

    for (String functionQueryString : query.getFunctionQuerysList()) {

        queryStr.append("_query_:\"{!func}" + functionQueryString + "\"" + " AND ");

    }
    // check if final queryStr is empty
    if (queryStr.toString().trim().length() == 0) {
        queryStr.append("*:*");
    }

    // delete last AND
    if (queryStr.toString().contains("AND")) {

        int and = queryStr.lastIndexOf("AND");
        queryStr.replace(and, and + 3, "");
    }
    if (filterQueryStr.toString().contains("AND")) {
        int and = filterQueryStr.lastIndexOf("AND");
        filterQueryStr.replace(and, and + 3, "");
    }
    for (SortItem sortItem : sortItems) {
        String fieldName = sortItem.getFieldName();
        String order = sortItem.getSort();

        if (order == null) {
            LOGGER.info("ingore sort fieldName:" + fieldName + ", please configure it.");
            continue;
        }
        if (order.trim().equals("asc")) {
            solrQuery.setSort(fieldName, SolrQuery.ORDER.asc);
        }
        if (order.trim().equals("desc")) {
            solrQuery.addSort(fieldName, SolrQuery.ORDER.desc);

        }

    }

    solrQuery.setQuery(queryStr.toString());
    if (filterQueryStr.toString().length() != 0) {
        solrQuery.setFilterQueries(filterQueryStr.toString());

    }

    LOGGER.debug("final queryStr is:" + queryStr.toString() + "");
    LOGGER.debug("filter queryStr is:" + filterQueryStr.toString() + "");
    // //only response userID,score
    // solrQuery.setFields("userID","score");
    for (String fl : query.getFls()) {
        solrQuery.addField(fl);

    }
    int pageSize = query.getPageSize();
    solrQuery.add("start", String.valueOf((pageNum - 1) * pageSize));
    solrQuery.add("rows", String.valueOf(pageSize));
    // if have distance query
    // fq=_query_:%22{!geofilt}%22&sfield=location&pt=45.15,-93.85&d=50000&sort=geodist()%20asc&fl=score,geodist(),location
    String location = query.getLocationPoint();
    Double distance = query.getDistance();

    if (location != null && distance != null) {
        solrQuery.add("d", distance.toString());
        solrQuery.add("pt", location);
        solrQuery.add("sfield", "location");
        solrQuery.add("fq", "_query_:{!geofilt}");
        solrQuery.addSort("geodist()", SolrQuery.ORDER.asc);

    }

    return solrQuery;
}

From source file:com.doculibre.constellio.services.SearchServicesImpl.java

License:Open Source License

@Override
public QueryResponse search(SimpleSearch simpleSearch, int start, int rows, SearchParams searchParams,
        ConstellioUser user) {//from   www . ja v a  2  s .com
    QueryResponse queryResponse;

    String collectionName = simpleSearch.getCollectionName();
    if (collectionName != null) {
        RecordCollectionServices collectionServices = ConstellioSpringUtils.getRecordCollectionServices();
        RecordServices recordServices = ConstellioSpringUtils.getRecordServices();
        RecordCollection collection = collectionServices.get(collectionName);

        SolrServices solrServices = ConstellioSpringUtils.getSolrServices();
        Boolean usesDisMax = solrServices.usesDisMax(collection);

        SolrQuery query;
        if (!collection.isOpenSearch()) {
            query = toSolrQuery(simpleSearch, usesDisMax, true, true);
        } else {
            query = toSolrQuery(simpleSearch, usesDisMax, false, true);
        }
        // displayQuery(query);

        String luceneQuery = simpleSearch.getLuceneQuery();
        query.setParam(ConstellioSolrQueryParams.LUCENE_QUERY, luceneQuery);
        query.setParam(ConstellioSolrQueryParams.SIMPLE_SEARCH, simpleSearch.toSimpleParams().toString());
        query.setParam(ConstellioSolrQueryParams.COLLECTION_NAME, collectionName);
        if (user != null) {
            query.setParam(ConstellioSolrQueryParams.USER_ID, "" + user.getId());
        }

        String queryString = query.getQuery();
        if (StringUtils.isEmpty(queryString)) {
            queryString = SimpleSearch.SEARCH_ALL;
        }

        List<Record> pendingExclusions = recordServices.getPendingExclusions(collection);
        while (!pendingExclusions.isEmpty()) {
            IndexingManager indexingManager = IndexingManager.get(collection);
            if (indexingManager.isActive()) {
                try {
                    Thread.sleep(100);
                } catch (InterruptedException e) {
                    throw new RuntimeException(e);
                }
                pendingExclusions = recordServices.getPendingExclusions(collection);
            } else {
                return null;
            }
        }

        // SolrQuery query = new SolrQuery();
        query.set("collectionName", simpleSearch.getCollectionName());
        // query.setQuery(luceneQuery);

        query.set("shards.qt", "/elevate");
        query.setRequestHandler("/elevate");

        // nb rsultats par page
        query.setRows(rows);

        // page de dbut
        query.setStart(start);
        query.setHighlight(searchParams.isHighlightingEnabled());
        if (searchParams.isHighlightingEnabled()) {
            query.setHighlightFragsize(searchParams.getFragsize());
            query.setHighlightSnippets(searchParams.getSnippets());
        }

        if (simpleSearch.getSortField() != null) {
            ORDER order = SimpleSearch.SORT_DESCENDING.equals(simpleSearch.getSortOrder()) ? ORDER.desc
                    : ORDER.asc;
            IndexFieldServices indexFieldServices = ConstellioSpringUtils.getIndexFieldServices();
            IndexField indexField = indexFieldServices.get(simpleSearch.getSortField(), collection);
            if (indexField != null) {
                IndexField sortIndexField = indexFieldServices.getSortFieldOf(indexField);
                if (sortIndexField != null) {
                    query.setSort(sortIndexField.getName(), order);
                }
            }
        }

        if (collection.isOpenSearch()) {
            query.setParam("openSearchURL", collection.getOpenSearchURL());
            Locale locale = simpleSearch.getSingleSearchLocale();
            if (locale != null) {
                query.setParam("lang", locale.getLanguage());
            }
        }

        if (searchParams.getHighlightedFields() == null) {
            IndexField defaultSearchField = collection.getDefaultSearchIndexField();
            query.addHighlightField(defaultSearchField.getName());
            for (CopyField copyFieldDest : defaultSearchField.getCopyFieldsDest()) {
                IndexField copyIndexFieldSource = copyFieldDest.getIndexFieldSource();
                if (copyIndexFieldSource != null && !copyIndexFieldSource.isTitleField()
                        && copyIndexFieldSource.isHighlighted()) {
                    query.addHighlightField(copyIndexFieldSource.getName());
                }
            }
            IndexField titleField = collection.getTitleIndexField();
            if (titleField != null && titleField.isHighlighted()) {
                query.addHighlightField(titleField.getName());
            }
        } else {
            for (String highlightedField : searchParams.getHighlightedFields()) {
                IndexField field = collection.getIndexField(highlightedField);
                if (field != null) {
                    query.addHighlightField(highlightedField);
                }
            }
        }
        SolrServer server = SolrCoreContext.getSolrServer(collectionName);
        if (server != null) {
            try {
                // displayQuery(query);
                queryResponse = server.query(query);
            } catch (SolrServerException e) {
                queryResponse = null;
            }
        } else {
            queryResponse = null;
        }

        //            if (queryResponse != null && !collection.isOpenSearch()) {
        //                StatsCompiler statCompiler = StatsCompiler.getInstance();
        //                try {
        //                    statCompiler.saveStats(collectionName, SolrLogContext.getStatsSolrServer(),
        //                        SolrLogContext.getStatsCompileSolrServer(), queryResponse, luceneQuery);
        //                } catch (SolrServerException e) {
        //                    throw new RuntimeException(e);
        //                } catch (IOException e) {
        //                    throw new RuntimeException(e);
        //                }
        //            }

    } else {
        queryResponse = null;
    }

    // improveQueryResponse(collectionName, queryResponse);
    // System.out.println("Response size" + queryResponse.getResults().getNumFound());
    return queryResponse;
}

From source file:com.doculibre.constellio.services.StatusServicesImpl.java

License:Open Source License

@Override
public List<Record> listLastIndexedRecords(RecordCollection collection, int maxSize) {
    List<Record> lastIndexedRecords;
    RecordServices recordServices = ConstellioSpringUtils.getRecordServices();

    String luceneQuery = SimpleSearch.SEARCH_ALL;
    SolrQuery solrQuery = new SolrQuery(luceneQuery);
    solrQuery.setRequestHandler("standard");
    solrQuery.setRows(maxSize);/*  ww w  .j ava  2 s  .  c  o  m*/
    solrQuery.setSort(IndexField.LAST_INDEXED_FIELD, ORDER.desc);

    String collectionName = collection.getName();
    solrQuery.setParam(ConstellioSolrQueryParams.LUCENE_QUERY, luceneQuery);
    solrQuery.setParam(ConstellioSolrQueryParams.COLLECTION_NAME, collectionName);

    SolrServer server = SolrCoreContext.getSolrServer(collectionName);
    if (server != null && collection.getIndexField(IndexField.LAST_INDEXED_FIELD) != null) {
        try {
            QueryResponse queryResponse = server.query(solrQuery);
            SolrDocumentList results = queryResponse.getResults();
            List<Number> recordIds = new ArrayList<Number>();
            for (SolrDocument result : results) {
                Long recordId = new Long(result.getFieldValue(IndexField.RECORD_ID_FIELD).toString());
                recordIds.add(recordId);
            }
            if (!recordIds.isEmpty()) {
                lastIndexedRecords = recordServices.list(recordIds, collection);
            } else {
                lastIndexedRecords = new ArrayList<Record>();
            }
        } catch (SolrServerException e) {
            throw new RuntimeException(e);
        }
    } else if (!collection.isSynchronizationRequired()) {
        String msg = "No SolrServer available for collection id " + collection.getId();
        LOGGER.log(Level.SEVERE, msg);
        lastIndexedRecords = new ArrayList<Record>();
    } else if (collection.getIndexField(IndexField.LAST_INDEXED_FIELD) == null) {
        String msg = "No " + IndexField.LAST_INDEXED_FIELD + " index field for collection id "
                + collection.getId();
        LOGGER.log(Level.SEVERE, msg);
        lastIndexedRecords = new ArrayList<Record>();
    } else {
        lastIndexedRecords = new ArrayList<Record>();
    }
    return lastIndexedRecords;
}

From source file:com.doculibre.constellio.stats.StatsSearcher.java

License:Open Source License

public QueryResponse getMostPopularQueries(String collectionName, SolrServer server, Date startDate,
        Date endDate, int start, int row) throws SolrServerException {
    SolrQuery solrQuery = new SolrQuery();
    solrQuery.setStart(start);//ww  w.  jav  a 2  s.  c o  m
    solrQuery.setRows(row);
    solrQuery.setSort("freq", SolrQuery.ORDER.desc);
    StringBuffer querySB = new StringBuffer("collection:" + collectionName + " recherche:recherche");
    //      querySB.append(" date:[");
    //      querySB.append(StatsCompiler.format(startDate));
    //      querySB.append(" TO ");
    //      querySB.append(StatsCompiler.format(endDate));
    //      querySB.append("]");
    solrQuery.setQuery(querySB.toString());
    return server.query(solrQuery);
}

From source file:com.doculibre.constellio.stats.StatsSearcher.java

License:Open Source License

public QueryResponse getMostPopularQueriesZeroRes(String collectionName, SolrServer server, Date startDate,
        Date endDate, int start, int row) throws SolrServerException {
    SolrQuery solrQuery = new SolrQuery();
    solrQuery.setStart(start);//from w w w.j  a  v  a2s.  co m
    solrQuery.setRows(row);
    solrQuery.setSort("freq", SolrQuery.ORDER.desc);
    StringBuffer querySB = new StringBuffer("collection:" + collectionName + " zero:true");
    //      querySB.append(" date:[");
    //      querySB.append(StatsCompiler.format(startDate));
    //      querySB.append(" TO ");
    //      querySB.append(StatsCompiler.format(endDate));
    //      querySB.append("]");
    solrQuery.setQuery(querySB.toString());
    return server.query(solrQuery);
}

From source file:com.doculibre.constellio.stats.StatsSearcher.java

License:Open Source License

public QueryResponse getMostPopularQueriesWithRes(String collectionName, SolrServer server, Date startDate,
        Date endDate, int start, int row) throws SolrServerException {
    SolrQuery solrQuery = new SolrQuery();
    solrQuery.setStart(start);/* w w  w  .j a va  2s. c  om*/
    solrQuery.setRows(row);
    solrQuery.setSort("freq", SolrQuery.ORDER.desc);
    StringBuffer querySB = new StringBuffer("collection:" + collectionName + " zero:false");
    //      querySB.append(" date:[");
    //      querySB.append(StatsCompiler.format(startDate));
    //      querySB.append(" TO ");
    //      querySB.append(StatsCompiler.format(endDate));
    //      querySB.append("]");
    solrQuery.setQuery(querySB.toString());
    return server.query(solrQuery);
}

From source file:com.doculibre.constellio.stats.StatsSearcher.java

License:Open Source License

public QueryResponse getMostPopularQueriesWithClick(String collectionName, SolrServer server, Date startDate,
        Date endDate, int start, int row) throws SolrServerException {
    SolrQuery solrQuery = new SolrQuery();
    solrQuery.setStart(start);//from w  w w  .  ja v  a2s  .  c  o  m
    solrQuery.setRows(row);
    solrQuery.setSort("freq", SolrQuery.ORDER.desc);
    StringBuffer querySB = new StringBuffer("collection:" + collectionName + " clickstr:notzero");
    //      querySB.append(" date:[");
    //      querySB.append(StatsCompiler.format(startDate));
    //      querySB.append(" TO ");
    //      querySB.append(StatsCompiler.format(endDate));
    //      querySB.append("]");
    solrQuery.setQuery(querySB.toString());
    return server.query(solrQuery);
}

From source file:com.doculibre.constellio.stats.StatsSearcher.java

License:Open Source License

public QueryResponse getMostPopularQueriesWithoutClick(String collectionName, SolrServer server, Date startDate,
        Date endDate, int start, int row) throws SolrServerException {
    SolrQuery solrQuery = new SolrQuery();
    solrQuery.setStart(start);//from  w  w w.j  a va  2s .com
    solrQuery.setRows(row);
    solrQuery.setSort("freq", SolrQuery.ORDER.desc);
    StringBuffer querySB = new StringBuffer("collection:" + collectionName + " clickstr:zero");
    //      querySB.append(" date:[");
    //      querySB.append(StatsCompiler.format(startDate));
    //      querySB.append(" TO ");
    //      querySB.append(StatsCompiler.format(endDate));
    //      querySB.append("]");
    solrQuery.setQuery(querySB.toString());
    return server.query(solrQuery);
}

From source file:com.doculibre.constellio.stats.StatsSearcher.java

License:Open Source License

public QueryResponse getQueryLog(String collectionName, SolrServer server, Date startDate, Date endDate,
        int start, int row) throws SolrServerException {
    SolrQuery solrQuery = new SolrQuery();
    solrQuery.setStart(start);/*from w w  w .  j a va 2  s.  c om*/
    solrQuery.setRows(row);
    solrQuery.setSort("date", SolrQuery.ORDER.desc);
    StringBuffer querySB = new StringBuffer("collection:" + collectionName + " recherche:recherche");
    querySB.append(" date:[");
    querySB.append(StatsCompiler.format(startDate));
    querySB.append(" TO ");
    querySB.append(StatsCompiler.format(endDate));
    querySB.append("]");
    solrQuery.setQuery(querySB.toString());
    return server.query(solrQuery);
}