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

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

Introduction

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

Prototype

public SolrQuery addFacetQuery(String f) 

Source Link

Document

add a faceting query

Usage

From source file:org.apache.nutch.indexwriter.solr.TestSolrJ.java

License:Apache License

/**
 * query the example//from w w w  .  j  a v  a  2  s  . c o m
 */
@Test
public void testQuery() throws Exception {
    SolrClient client = new HttpSolrClient.Builder(serverUrl).build();

    // Empty the database...
    client.deleteByQuery("*:*");// delete everything!

    // Now add something...
    SolrInputDocument doc = new SolrInputDocument();
    String docID = "1112211111";
    doc.addField("id", docID, 1.0f);
    doc.addField("name", "my name!", 1.0f);

    assertEquals(null, doc.getField("foo"));
    assertTrue(doc.getField("name").getValue() != null);

    UpdateResponse upres = client.add(doc);
    // System.out.println( "ADD:"+upres.getResponse() );
    assertEquals(0, upres.getStatus());

    upres = client.commit(true, true);
    // System.out.println( "COMMIT:"+upres.getResponse() );
    assertEquals(0, upres.getStatus());

    upres = client.optimize(true, true);
    // System.out.println( "OPTIMIZE:"+upres.getResponse() );
    assertEquals(0, upres.getStatus());

    SolrQuery query = new SolrQuery();
    query.setQuery("id:" + docID);
    QueryResponse response = client.query(query);

    assertEquals(docID, response.getResults().get(0).getFieldValue("id"));

    // Now add a few docs for facet testing...
    List<SolrInputDocument> docs = new ArrayList<>();
    SolrInputDocument doc2 = new SolrInputDocument();
    doc2.addField("id", "2", 1.0f);
    doc2.addField("inStock", true, 1.0f);
    doc2.addField("price", 2, 1.0f);
    doc2.addField("timestamp_dt", new java.util.Date(), 1.0f);
    docs.add(doc2);
    SolrInputDocument doc3 = new SolrInputDocument();
    doc3.addField("id", "3", 1.0f);
    doc3.addField("inStock", false, 1.0f);
    doc3.addField("price", 3, 1.0f);
    doc3.addField("timestamp_dt", new java.util.Date(), 1.0f);
    docs.add(doc3);
    SolrInputDocument doc4 = new SolrInputDocument();
    doc4.addField("id", "4", 1.0f);
    doc4.addField("inStock", true, 1.0f);
    doc4.addField("price", 4, 1.0f);
    doc4.addField("timestamp_dt", new java.util.Date(), 1.0f);
    docs.add(doc4);
    SolrInputDocument doc5 = new SolrInputDocument();
    doc5.addField("id", "5", 1.0f);
    doc5.addField("inStock", false, 1.0f);
    doc5.addField("price", 5, 1.0f);
    doc5.addField("timestamp_dt", new java.util.Date(), 1.0f);
    docs.add(doc5);

    upres = client.add(docs);
    // System.out.println( "ADD:"+upres.getResponse() );
    assertEquals(0, upres.getStatus());

    upres = client.commit(true, true);
    // System.out.println( "COMMIT:"+upres.getResponse() );
    assertEquals(0, upres.getStatus());

    upres = client.optimize(true, true);
    // System.out.println( "OPTIMIZE:"+upres.getResponse() );
    assertEquals(0, upres.getStatus());

    query = new SolrQuery("*:*");
    query.addFacetQuery("price:[* TO 2]");
    query.addFacetQuery("price:[2 TO 4]");
    query.addFacetQuery("price:[5 TO *]");
    query.addFacetField("inStock");
    query.addFacetField("price");
    query.addFacetField("timestamp_dt");
    query.removeFilterQuery("inStock:true");

    response = client.query(query);
    assertEquals(0, response.getStatus());
    assertEquals(5, response.getResults().getNumFound());
    assertEquals(3, response.getFacetQuery().size());
    assertEquals(2, response.getFacetField("inStock").getValueCount());
    assertEquals(4, response.getFacetField("price").getValueCount());

    // test a second query, test making a copy of the main query
    SolrQuery query2 = query.getCopy();
    query2.addFilterQuery("inStock:true");
    response = client.query(query2);
    assertEquals(1, query2.getFilterQueries().length);
    assertEquals(0, response.getStatus());
    assertEquals(2, response.getResults().getNumFound());
    assertFalse(query.getFilterQueries() == query2.getFilterQueries());

    // sanity check round tripping of params...
    query = new SolrQuery("foo");
    query.addFilterQuery("{!field f=inStock}true");
    query.addFilterQuery("{!term f=name}hoss");
    query.addFacetQuery("price:[* TO 2]");
    query.addFacetQuery("price:[2 TO 4]");

    response = client.query(query);
    assertTrue("echoed params are not a NamedList: " + response.getResponseHeader().get("params").getClass(),
            response.getResponseHeader().get("params") instanceof NamedList);
    NamedList echo = (NamedList) response.getResponseHeader().get("params");
    List values = null;
    assertEquals("foo", echo.get("q"));
    assertTrue("echoed fq is not a List: " + echo.get("fq").getClass(), echo.get("fq") instanceof List);
    values = (List) echo.get("fq");
    assertEquals(2, values.size());
    assertEquals("{!field f=inStock}true", values.get(0));
    assertEquals("{!term f=name}hoss", values.get(1));
    assertTrue("echoed facet.query is not a List: " + echo.get("facet.query").getClass(),
            echo.get("facet.query") instanceof List);
    values = (List) echo.get("facet.query");
    assertEquals(2, values.size());
    assertEquals("price:[* TO 2]", values.get(0));
    assertEquals("price:[2 TO 4]", values.get(1));
}

From source file:org.apache.ofbiz.solr.SolrProductSearch.java

License:Apache License

/**
 * Runs a query on the Solr Search Engine and returns the results.
 * <p>/*from   w  ww  .ja  v a  2s.  c o m*/
 * This function only returns an object of type QueryResponse, so it is probably not a good idea to call it directly from within the
 * groovy files (As a decent example on how to use it, however, use keywordSearch instead).
 */
public static Map<String, Object> runSolrQuery(DispatchContext dctx, Map<String, Object> context) {
    // get Connection
    HttpSolrClient client = null;
    String solrIndexName = (String) context.get("indexName");
    Map<String, Object> result;
    try {
        client = SolrUtil.getInstance().getHttpSolrClient(solrIndexName);
        // create Query Object
        SolrQuery solrQuery = new SolrQuery();
        solrQuery.setQuery((String) context.get("query"));
        // solrQuery.setQueryType("dismax");
        boolean faceted = (Boolean) context.get("facet");
        if (faceted) {
            solrQuery.setFacet(faceted);
            solrQuery.addFacetField("manu");
            solrQuery.addFacetField("cat");
            solrQuery.setFacetMinCount(1);
            solrQuery.setFacetLimit(8);

            solrQuery.addFacetQuery("listPrice:[0 TO 50]");
            solrQuery.addFacetQuery("listPrice:[50 TO 100]");
            solrQuery.addFacetQuery("listPrice:[100 TO 250]");
            solrQuery.addFacetQuery("listPrice:[250 TO 500]");
            solrQuery.addFacetQuery("listPrice:[500 TO 1000]");
            solrQuery.addFacetQuery("listPrice:[1000 TO 2500]");
            solrQuery.addFacetQuery("listPrice:[2500 TO 5000]");
            solrQuery.addFacetQuery("listPrice:[5000 TO 10000]");
            solrQuery.addFacetQuery("listPrice:[10000 TO 50000]");
            solrQuery.addFacetQuery("listPrice:[50000 TO *]");
        }

        boolean spellCheck = (Boolean) context.get("spellcheck");
        if (spellCheck) {
            solrQuery.setParam("spellcheck", spellCheck);
        }

        boolean highLight = (Boolean) context.get("highlight");
        if (highLight) {
            solrQuery.setHighlight(highLight);
            solrQuery.setHighlightSimplePre("<span class=\"highlight\">");
            solrQuery.addHighlightField("description");
            solrQuery.setHighlightSimplePost("</span>");
            solrQuery.setHighlightSnippets(2);
        }

        // Set additional Parameter
        // SolrQuery.ORDER order = SolrQuery.ORDER.desc;

        if (context.get("viewIndex") != null && (Integer) context.get("viewIndex") > 0) {
            solrQuery.setStart((Integer) context.get("viewIndex"));
        }
        if (context.get("viewSize") != null && (Integer) context.get("viewSize") > 0) {
            solrQuery.setRows((Integer) context.get("viewSize"));
        }

        // if ((List) context.get("queryFilter") != null && ((ArrayList<SolrDocument>) context.get("queryFilter")).size() > 0) {
        // List filter = (List) context.get("queryFilter");
        // String[] tn = new String[filter.size()];
        // Iterator it = filter.iterator();
        // for (int i = 0; i < filter.size(); i++) {
        // tn[i] = (String) filter.get(i);
        // }
        // solrQuery.setFilterQueries(tn);
        // }
        String queryFilter = (String) context.get("queryFilter");
        if (UtilValidate.isNotEmpty(queryFilter))
            solrQuery.setFilterQueries(queryFilter.split(" "));
        if ((String) context.get("returnFields") != null) {
            solrQuery.setFields((String) context.get("returnFields"));
        }

        // if((Boolean)context.get("sortByReverse"))order.reverse();
        if ((String) context.get("sortBy") != null && ((String) context.get("sortBy")).length() > 0) {
            SolrQuery.ORDER order;
            if (!((Boolean) context.get("sortByReverse")))
                order = SolrQuery.ORDER.asc;
            else
                order = SolrQuery.ORDER.desc;
            solrQuery.setSort(((String) context.get("sortBy")).replaceFirst("-", ""), order);
        }

        if ((String) context.get("facetQuery") != null) {
            solrQuery.addFacetQuery((String) context.get("facetQuery"));
        }

        QueryResponse rsp = client.query(solrQuery);
        result = ServiceUtil.returnSuccess();
        result.put("queryResult", rsp);
    } catch (Exception e) {
        Debug.logError(e, e.getMessage(), module);
        result = ServiceUtil.returnError(e.toString());
    } finally {
        if (client != null) {
            try {
                client.close();
            } catch (IOException e) {
                // do nothing
            }
        }
    }
    return result;
}

From source file:org.broadleafcommerce.core.search.service.solr.SolrHelperServiceImpl.java

License:Apache License

@Override
public void attachFacets(SolrQuery query, Map<String, SearchFacetDTO> namedFacetMap) {
    query.setFacet(true);/*  w  ww  .  j  av  a  2  s.  c  o m*/
    for (Entry<String, SearchFacetDTO> entry : namedFacetMap.entrySet()) {
        SearchFacetDTO dto = entry.getValue();

        // Clone the list - we don't want to remove these facets from the DB
        List<SearchFacetRange> facetRanges = new ArrayList<SearchFacetRange>(
                dto.getFacet().getSearchFacetRanges());

        if (extensionManager != null) {
            extensionManager.getProxy().filterSearchFacetRanges(dto, facetRanges);
        }

        if (facetRanges != null && facetRanges.size() > 0) {
            for (SearchFacetRange range : facetRanges) {
                query.addFacetQuery(getSolrTaggedFieldString(entry.getKey(), "key", range));
            }
        } else {
            query.addFacetField(getSolrTaggedFieldString(entry.getKey(), "key", null));
        }
    }
}

From source file:org.codelibs.fess.service.SearchService.java

License:Apache License

public List<Map<String, Object>> getDocumentList(final String query, final int start, final int rows,
        final FacetInfo facetInfo, final GeoInfo geoInfo, final MoreLikeThisInfo mltInfo,
        final String[] responseFields, final String[] docValuesFields, final boolean forUser) {
    if (start > queryHelper.getMaxSearchResultOffset()) {
        throw new ResultOffsetExceededException("The number of result size is exceeded.");
    }/*from  w  ww  .ja va  2 s.c om*/

    final long startTime = System.currentTimeMillis();

    final SolrGroup solrGroup = solrGroupManager.getSolrGroup(QueryType.QUERY);

    QueryResponse queryResponse = null;
    final SolrQuery solrQuery = new SolrQuery();
    final SearchQuery searchQuery = queryHelper.build(query, forUser);
    final String q = searchQuery.getQuery();
    if (StringUtil.isNotBlank(q)) {
        // fields
        solrQuery.setFields(responseFields);
        // query
        solrQuery.setQuery(q);
        solrQuery.setStart(start);
        solrQuery.setRows(rows);
        solrQuery.set("mm", searchQuery.getMinimumShouldMatch());
        solrQuery.set("defType", searchQuery.getDefType());
        for (final Map.Entry<String, String[]> entry : queryHelper.getQueryParamMap().entrySet()) {
            solrQuery.set(entry.getKey(), entry.getValue());
        }
        // filter query
        if (searchQuery.hasFilterQueries()) {
            solrQuery.addFilterQuery(searchQuery.getFilterQueries());
        }
        // sort
        final SortField[] sortFields = searchQuery.getSortFields();
        if (sortFields.length != 0) {
            for (final SortField sortField : sortFields) {
                solrQuery.addSort(sortField.getField(),
                        Constants.DESC.equals(sortField.getOrder()) ? SolrQuery.ORDER.desc
                                : SolrQuery.ORDER.asc);
            }
        } else if (queryHelper.hasDefaultSortFields()) {
            for (final SortField sortField : queryHelper.getDefaultSortFields()) {
                solrQuery.addSort(sortField.getField(),
                        Constants.DESC.equals(sortField.getOrder()) ? SolrQuery.ORDER.desc
                                : SolrQuery.ORDER.asc);
            }
        }
        // highlighting
        if (queryHelper.getHighlightingFields() != null && queryHelper.getHighlightingFields().length != 0) {
            for (final String hf : queryHelper.getHighlightingFields()) {
                solrQuery.addHighlightField(hf);
            }
            solrQuery.setHighlightSnippets(queryHelper.getHighlightSnippetSize());
        }
        // shards
        if (queryHelper.getShards() != null) {
            solrQuery.setParam("shards", queryHelper.getShards());
        }
        // geo
        if (geoInfo != null && geoInfo.isAvailable()) {
            solrQuery.addFilterQuery(geoInfo.toGeoQueryString());
            final String additionalGeoQuery = queryHelper.getAdditionalGeoQuery();
            if (StringUtil.isNotBlank(additionalGeoQuery)) {
                solrQuery.addFilterQuery(additionalGeoQuery);
            }
        }
        // facets
        if (facetInfo != null) {
            solrQuery.setFacet(true);
            if (facetInfo.field != null) {
                for (final String f : facetInfo.field) {
                    if (queryHelper.isFacetField(f)) {
                        solrQuery.addFacetField(f);
                    } else {
                        throw new FessSolrQueryException("EFESS0002", new Object[] { f });
                    }
                }
            }
            if (facetInfo.query != null) {
                for (final String fq : facetInfo.query) {
                    final String facetQuery = queryHelper.buildFacetQuery(fq);
                    if (StringUtil.isNotBlank(facetQuery)) {
                        solrQuery.addFacetQuery(facetQuery);
                    } else {
                        throw new FessSolrQueryException("EFESS0003", new Object[] { fq, facetQuery });
                    }
                }
            }
            if (facetInfo.limit != null) {
                solrQuery.setFacetLimit(Integer.parseInt(facetInfo.limit));
            }
            if (facetInfo.minCount != null) {
                solrQuery.setFacetMinCount(Integer.parseInt(facetInfo.minCount));
            }
            if (facetInfo.missing != null) {
                solrQuery.setFacetMissing(Boolean.parseBoolean(facetInfo.missing));
            }
            if (facetInfo.prefix != null) {
                solrQuery.setFacetPrefix(facetInfo.prefix);
            }
            if (facetInfo.sort != null && queryHelper.isFacetSortValue(facetInfo.sort)) {
                solrQuery.setFacetSort(facetInfo.sort);
            }
        }
        // mlt
        if (mltInfo != null) {
            final String mltField = queryHelper.getMoreLikeThisField(mltInfo.field);
            if (mltField != null) {
                solrQuery.set("mlt", true);
                if (mltInfo.count != null) {
                    solrQuery.set("mlt.count", Integer.parseInt(mltInfo.count));
                }
                solrQuery.set("mlt.fl", mltField);
            }
        }

        if (queryHelper.getTimeAllowed() >= 0) {
            solrQuery.setTimeAllowed(queryHelper.getTimeAllowed());
        }
        final Set<Entry<String, String[]>> paramSet = queryHelper.getRequestParameterSet();
        if (!paramSet.isEmpty()) {
            for (final Map.Entry<String, String[]> entry : paramSet) {
                solrQuery.set(entry.getKey(), entry.getValue());
            }
        }

        if (docValuesFields != null) {
            for (final String docValuesField : docValuesFields) {
                solrQuery.add(Constants.DCF, docValuesField);
            }
        }

        queryResponse = solrGroup.query(solrQuery, SolrRequest.METHOD.POST);
    }
    final long execTime = System.currentTimeMillis() - startTime;

    final QueryResponseList queryResponseList = ComponentUtil.getQueryResponseList();
    queryResponseList.init(queryResponse, rows);
    queryResponseList.setSearchQuery(q);
    queryResponseList.setSolrQuery(solrQuery.toString());
    queryResponseList.setExecTime(execTime);
    return queryResponseList;
}

From source file:org.dbflute.solr.cbean.AbstractSolrConditionBean.java

License:Apache License

@Override
public SolrQuery buildSolrQuery() {
    SolrQuery query = new SolrQuery();

    if (this.isSpecified()) {
        query.setFields(this.getSpecifyFields());
    } else {/*from   w  ww  . j  ava  2  s .  co  m*/
        query.setFields(this.getAllFields());
    }
    if (this.isUseFilterQuery()) {
        query.setQuery(this.getMinimumQuery());
        query.setFilterQueries(this.getQueryArray());
    } else {
        query.setQuery(this.getQueryString());
        String[] filterQueryArray = this.getFilterQueryArray();
        if (filterQueryArray != null && filterQueryArray.length != 0) {
            query.setFilterQueries(this.getFilterQueryArray());
        }
    }
    if (this.isUseSort()) {
        for (SortClause sortClause : this.getSolrSortClauseList()) {
            query.addSort(sortClause);
        }
    }

    for (SolrQueryBean queryBean : this.getFacetQueryList()) {
        query.addFacetQuery(queryBean.getQueryString());
    }

    SolrSpecification facetSpecifyBean = getFacetSpecification();
    if (facetSpecifyBean.getSpecifyFields().length > 0) {
        query.addFacetField(facetSpecifyBean.getSpecifyFields());
    }

    query.setStart(this.getPageStart());
    query.setRows(this.getPageSize());

    return query;
}

From source file:org.dspace.app.webui.cris.components.statistics.StatSelectedObjectComponent.java

@Override
public TreeKeyMap query(String id, HttpSolrServer solrServer) throws Exception {
    statisticDatasBeans = new TreeKeyMap();
    if (id != null && !id.equals("") && StatComponentsService.getYearsQuery() != null) {
        solrServer.setMaxRetries(0);/* www.j a  v a2s. c  o  m*/
        SolrQuery solrQuery = new SolrQuery();

        _prepareBasicQuery(solrQuery, StatComponentsService.getYearsQuery());

        if (StatComponentsService.isExcludeBot()) {
            solrQuery.addFilterQuery("-isBot:true");
        }

        Integer relationType = getRelationObjectType();
        if (relationType == null) {
            relationType = CrisConstants.getEntityType(getRelationObjectClass().newInstance());
        }
        solrQuery.addFilterQuery("type:" + relationType);

        String query = STATS_QUERY;
        if (getBean() != null) {
            String beanQuery = getBean().getQuery();
            query += (beanQuery != null && !beanQuery.isEmpty()) ? beanQuery : "";
            for (String filter : getBean().getFilters()) {
                solrQuery.addFilterQuery(filter);
            }
        }

        solrQuery.setQuery(MessageFormat.format(query, id));
        if (getBean() instanceof BeanFacetComponent) {
            BeanFacetComponent beanFacet = (BeanFacetComponent) getBean();
            solrQuery.setFacet(true);
            solrQuery.addFacetQuery(beanFacet.getFacetQuery());
            solrQuery.addFacetField(beanFacet.getFacetField());
        }
        solrResponse = solrServer.query(solrQuery);

        buildPageResultModules(StatComponentsService._SELECTED_OBJECT);
    } else {
        throw new Exception("Item Id not valid");
    }

    return statisticDatasBeans;
}

From source file:org.dspace.app.webui.cris.components.statistics.StatTopObjectComponent.java

@Override
public TreeKeyMap query(String id, HttpSolrServer solrServer) throws Exception {
    statisticDatasBeans = new TreeKeyMap();
    if (id != null && !id.equals("") && StatComponentsService.getYearsQuery() != null) {

        // HttpSolrServer solrServer = new HttpSolrServer(
        // solrConfig.getUrl()+solrCore);
        solrServer.setMaxRetries(0);//from  w w  w  . jav  a  2s .  c  o  m
        SolrQuery solrQuery = new SolrQuery();
        // http://localhost:8983/solr/statistics/select/?q=type%3A2&rows=20&facet=true&facet.date=time&facet.date.start=2008-07-00T00:00:00.000Z&facet.date.end=2009-06-31T00:00:00.000Z&facet.date.gap=%2B1MONTHS&facet.field=id
        _prepareBasicQuery(solrQuery, StatComponentsService.getYearsQuery());
        // _prepareTopQuery(type, id, fieldName, solrQuery);

        if (StatComponentsService.isExcludeBot()) {
            solrQuery.addFilterQuery("-isBot:true");
        }

        Integer relationType = getRelationObjectType();
        if (relationType == null) {
            relationType = CrisConstants.getEntityType(getRelationObjectClass().newInstance());
        }
        solrQuery.addFilterQuery("type:" + relationType);
        for (String filter : getBean().getFilters()) {
            solrQuery.addFilterQuery(filter);
        }
        String query = MessageFormat.format(QUERY_COMMON, getFromField(), getBean().getQuery());
        String sID = getObjectId(id);
        query = MessageFormat.format(query, sID);
        solrQuery.setQuery(query);
        if (getBean() instanceof BeanFacetComponent) {
            BeanFacetComponent beanFacet = (BeanFacetComponent) getBean();
            solrQuery.setFacet(true);
            solrQuery.addFacetQuery(beanFacet.getFacetQuery());
            solrQuery.addFacetField(beanFacet.getFacetField());
        }
        solrResponse = solrServer.query(solrQuery);
        if (!getBean().getSubQueries().isEmpty()) {
            statisticDatasBeans.addValue(TOP, CrisConstants.getEntityTypeText(relationType), CATEGORY,
                    generateCategoryView(solrServer, TOP, relationType.toString(), CATEGORY,
                            StatComponentsService.getTopCityLength(), query, getBean().getSubQueries(), sID));
        }
        buildTopResultModules(relationType);

    } else {
        throw new Exception("Object Id not valid");
    }
    return statisticDatasBeans;
}

From source file:org.dspace.app.webui.cris.util.RelationPreferenceUtil.java

public RelatedObjects getRelatedObject(Context context, ACrisObject cris, String relationType, String userQuery,
        String status, List<Sort> sorts, int rpp, int offset) throws SearchServiceException, SQLException {
    String uuid = cris.getUuid();
    String configurationName = preferenceService.getConfigurationName(cris, relationType);
    RelationPreferenceConfiguration configuration = preferenceService.getConfigurationService()
            .getRelationPreferenceConfiguration(configurationName);
    List<ColumnVisualizationConfiguration> columns = configuration.getColumnsVisualizationConfiguration();
    RelatedObjects result = new RelatedObjects();
    List<RelatedObject> related = result.getObjects();

    String query = MessageFormat.format(configuration.getRelationConfiguration().getQuery(), cris.getCrisID(),
            cris.getUuid());//  w w w. j a va2 s . c  om

    boolean sysAdmin = AuthorizeManager.isAdmin(context);

    SolrQuery solrQuery = new SolrQuery();
    if (StringUtils.isNotEmpty(userQuery)) {
        solrQuery.addFilterQuery("{!tag=user}" + ClientUtils.escapeQueryChars(userQuery) + "*");
        solrQuery.addFacetQuery("{!ex=user}*:*");
    }

    if (!configuration.isActionEnabled(RelationPreference.HIDED, sysAdmin)) {
        solrQuery.addFilterQuery(getHiddenFilter(cris, configurationName));
    }
    if (!configuration.isActionEnabled(RelationPreference.SELECTED, sysAdmin)) {
        solrQuery.addFilterQuery(getSelectedFilter(cris, configurationName));
    }
    if (configuration.isActionEnabled(RelationPreference.UNLINKED, sysAdmin)) {
        query = getUnlinkedFilter(cris, configurationName, query);
    }

    solrQuery.setQuery(query);

    if (StringUtils.isNotEmpty(status)) {

        solrQuery.addFilterQuery(RelationPreference.PREFIX_RELATIONPREFERENCES + configurationName + "."
                + status.toLowerCase() + ":\"" + cris.getUuid() + "\"");

    }

    if (sorts != null) {
        for (Sort s : sorts) {
            if (s.col < 0) {
                solrQuery.addSortField("cris-uuid", s.asc ? ORDER.asc : ORDER.desc);
                solrQuery.addSortField("search.resourceid", s.asc ? ORDER.asc : ORDER.desc);
            } else {
                solrQuery.addSortField(columns.get(s.col).getSortField(), s.asc ? ORDER.asc : ORDER.desc);
            }
        }
    }

    solrQuery.setRows(rpp);
    solrQuery.setStart(offset);
    solrQuery.setFields("search.resourceid", "cris-uuid",
            RelationPreference.PREFIX_RELATIONPREFERENCES + configurationName + "."
                    + RelationPreference.UNLINKED,
            RelationPreference.PREFIX_RELATIONPREFERENCES + configurationName + "." + RelationPreference.HIDED,
            RelationPreference.PREFIX_RELATIONPREFERENCES + configurationName + "."
                    + RelationPreference.SELECTED);
    QueryResponse qRes = searcher.search(solrQuery);
    result.setFilterRecords((int) qRes.getResults().getNumFound());
    if (StringUtils.isNotEmpty(userQuery)) {
        result.setTotalRecords(qRes.getFacetQuery().get("{!ex=user}*:*"));
    } else {
        result.setTotalRecords((int) qRes.getResults().getNumFound());
    }
    List<Object[]> dsoList = new ArrayList<Object[]>();
    for (SolrDocument doc : qRes.getResults()) {
        List<String> unlinked = (List<String>) doc.getFieldValue(RelationPreference.PREFIX_RELATIONPREFERENCES
                + configurationName + "." + RelationPreference.UNLINKED);
        List<String> hided = (List<String>) doc.getFieldValue(RelationPreference.PREFIX_RELATIONPREFERENCES
                + configurationName + "." + RelationPreference.HIDED);
        List<String> selected = (List<String>) doc.getFieldValue(RelationPreference.PREFIX_RELATIONPREFERENCES
                + configurationName + "." + RelationPreference.SELECTED);
        String relStatus = null;
        if (unlinked != null && unlinked.contains(uuid)) {
            relStatus = RelationPreference.UNLINKED;
        } else if (hided != null && hided.contains(uuid)) {
            relStatus = RelationPreference.HIDED;
        } else if (selected != null && selected.contains(uuid)) {
            relStatus = RelationPreference.SELECTED;
        }
        if (doc.getFieldValue("cris-uuid") == null) {
            try {
                dsoList.add(new Object[] { Item.find(context, (Integer) doc.getFieldValue("search.resourceid")),
                        relStatus });
            } catch (SQLException e) {
                throw new RuntimeException(e.getMessage(), e);
            }
        } else {
            dsoList.add(new Object[] {
                    applicationService.getEntityByUUID((String) doc.getFieldValue("cris-uuid")), relStatus });
        }
    }
    for (Object[] dso : dsoList) {
        related.add(convert(context, (DSpaceObject) dso[0], configuration, (String) dso[1]));
    }
    return result;
}

From source file:org.dspace.discovery.SolrServiceImpl.java

License:BSD License

protected SolrQuery resolveToSolrQuery(Context context, DiscoverQuery discoveryQuery,
        boolean includeUnDiscoverable) {
    SolrQuery solrQuery = new SolrQuery();

    String query = "*:*";
    if (discoveryQuery.getQuery() != null) {
        query = discoveryQuery.getQuery();
    }//from   ww  w .j av a  2s .  co  m

    solrQuery.setQuery(query);
    if (discoveryQuery.isSpellCheck()) {
        solrQuery.setParam(SpellingParams.SPELLCHECK_Q, query);
        solrQuery.setParam(SpellingParams.SPELLCHECK_COLLATE, Boolean.TRUE);
        solrQuery.setParam("spellcheck", Boolean.TRUE);
    }

    if (!includeUnDiscoverable) {
        solrQuery.addFilterQuery("NOT(withdrawn:true)");
        solrQuery.addFilterQuery("NOT(discoverable:false)");
    }

    for (int i = 0; i < discoveryQuery.getFilterQueries().size(); i++) {
        String filterQuery = discoveryQuery.getFilterQueries().get(i);
        solrQuery.addFilterQuery(filterQuery);
    }
    if (discoveryQuery.getDSpaceObjectFilter() != -1) {
        solrQuery.addFilterQuery("search.resourcetype:" + discoveryQuery.getDSpaceObjectFilter());
    }

    for (int i = 0; i < discoveryQuery.getFieldPresentQueries().size(); i++) {
        String filterQuery = discoveryQuery.getFieldPresentQueries().get(i);
        solrQuery.addFilterQuery(filterQuery + ":[* TO *]");
    }

    if (discoveryQuery.getStart() != -1) {
        solrQuery.setStart(discoveryQuery.getStart());
    }

    if (discoveryQuery.getMaxResults() != -1) {
        solrQuery.setRows(discoveryQuery.getMaxResults());
    }

    if (discoveryQuery.getSortField() != null) {
        SolrQuery.ORDER order = SolrQuery.ORDER.asc;
        if (discoveryQuery.getSortOrder().equals(DiscoverQuery.SORT_ORDER.desc))
            order = SolrQuery.ORDER.desc;

        solrQuery.addSortField(discoveryQuery.getSortField(), order);
    }

    for (String property : discoveryQuery.getProperties().keySet()) {
        List<String> values = discoveryQuery.getProperties().get(property);
        solrQuery.add(property, values.toArray(new String[values.size()]));
    }

    List<DiscoverFacetField> facetFields = discoveryQuery.getFacetFields();
    if (0 < facetFields.size()) {
        //Only add facet information if there are any facets
        for (DiscoverFacetField facetFieldConfig : facetFields) {
            String field = transformFacetField(facetFieldConfig, facetFieldConfig.getField(), false);
            solrQuery.addFacetField(field);

            // Setting the facet limit in this fashion ensures that each facet can have its own max
            solrQuery.add("f." + field + "." + FacetParams.FACET_LIMIT,
                    String.valueOf(facetFieldConfig.getLimit()));
            String facetSort;
            if (DiscoveryConfigurationParameters.SORT.COUNT.equals(facetFieldConfig.getSortOrder())) {
                facetSort = FacetParams.FACET_SORT_COUNT;
            } else {
                facetSort = FacetParams.FACET_SORT_INDEX;
            }
            solrQuery.add("f." + field + "." + FacetParams.FACET_SORT, facetSort);
            if (facetFieldConfig.getOffset() != -1) {
                solrQuery.setParam("f." + field + "." + FacetParams.FACET_OFFSET,
                        String.valueOf(facetFieldConfig.getOffset()));
            }
            if (facetFieldConfig.getPrefix() != null) {
                solrQuery.setFacetPrefix(field, facetFieldConfig.getPrefix());
            }
        }

        List<String> facetQueries = discoveryQuery.getFacetQueries();
        for (String facetQuery : facetQueries) {
            solrQuery.addFacetQuery(facetQuery);
        }

        if (discoveryQuery.getFacetMinCount() != -1) {
            solrQuery.setFacetMinCount(discoveryQuery.getFacetMinCount());
        }

        solrQuery.setParam(FacetParams.FACET_OFFSET, String.valueOf(discoveryQuery.getFacetOffset()));
    }

    if (0 < discoveryQuery.getHitHighlightingFields().size()) {
        solrQuery.setHighlight(true);
        solrQuery.add(HighlightParams.USE_PHRASE_HIGHLIGHTER, Boolean.TRUE.toString());
        for (DiscoverHitHighlightingField highlightingField : discoveryQuery.getHitHighlightingFields()) {
            solrQuery.addHighlightField(highlightingField.getField() + "_hl");
            solrQuery.add("f." + highlightingField.getField() + "_hl." + HighlightParams.FRAGSIZE,
                    String.valueOf(highlightingField.getMaxChars()));
            solrQuery.add("f." + highlightingField.getField() + "_hl." + HighlightParams.SNIPPETS,
                    String.valueOf(highlightingField.getMaxSnippets()));
        }

    }

    //Add any configured search plugins !
    List<SolrServiceSearchPlugin> solrServiceSearchPlugins = new DSpace().getServiceManager()
            .getServicesByType(SolrServiceSearchPlugin.class);
    for (SolrServiceSearchPlugin searchPlugin : solrServiceSearchPlugins) {
        searchPlugin.additionalSearchParameters(context, discoveryQuery, solrQuery);
    }
    return solrQuery;
}

From source file:org.dspace.statistics.SolrLogger.java

License:BSD License

public static QueryResponse query(String query, String filterQuery, String facetField, int rows, int max,
        String dateType, String dateStart, String dateEnd, List<String> facetQueries, String sort,
        boolean ascending) throws SolrServerException {
    if (solr == null) {
        return null;
    }// ww w  .  j  av a  2s .  c  om

    // System.out.println("QUERY");
    SolrQuery solrQuery = new SolrQuery().setRows(rows).setQuery(query).setFacetMinCount(1);
    addAdditionalSolrYearCores(solrQuery);

    // Set the date facet if present
    if (dateType != null) {
        solrQuery.setParam("facet.date", "time").
        // EXAMPLE: NOW/MONTH+1MONTH
                setParam("facet.date.end", "NOW/" + dateType + dateEnd + dateType)
                .setParam("facet.date.gap", "+1" + dateType).
                // EXAMPLE: NOW/MONTH-" + nbMonths + "MONTHS
                setParam("facet.date.start", "NOW/" + dateType + dateStart + dateType + "S").setFacet(true);
    }
    if (facetQueries != null) {
        for (int i = 0; i < facetQueries.size(); i++) {
            String facetQuery = facetQueries.get(i);
            solrQuery.addFacetQuery(facetQuery);
        }
        if (0 < facetQueries.size()) {
            solrQuery.setFacet(true);
        }
    }

    if (facetField != null) {
        solrQuery.addFacetField(facetField);
    }

    // Set the top x of if present
    if (max != -1) {
        solrQuery.setFacetLimit(max);
    }

    // A filter is used instead of a regular query to improve
    // performance and ensure the search result ordering will
    // not be influenced

    // Choose to filter by the Legacy spider IP list (may get too long to properly filter all IP's
    if (ConfigurationManager.getBooleanProperty("solr-statistics", "query.filter.spiderIp", false)) {
        solrQuery.addFilterQuery(getIgnoreSpiderIPs());
    }

    // Choose to filter by isBot field, may be overriden in future
    // to allow views on stats based on bots.
    if (ConfigurationManager.getBooleanProperty("solr-statistics", "query.filter.isBot", true)) {
        solrQuery.addFilterQuery("-isBot:true");
    }

    if (sort != null) {
        solrQuery.setSortField(sort, (ascending ? SolrQuery.ORDER.asc : SolrQuery.ORDER.desc));
    }

    String bundles;
    if ((bundles = ConfigurationManager.getProperty("solr-statistics", "query.filter.bundles")) != null
            && 0 < bundles.length()) {

        /**
         * The code below creates a query that will allow only records which do not have a bundlename
         * (items, collections, ...) or bitstreams that have a configured bundle name
         */
        StringBuffer bundleQuery = new StringBuffer();
        //Also add the possibility that if no bundle name is there these results will also be returned !
        bundleQuery.append("-(bundleName:[* TO *]");
        String[] split = bundles.split(",");
        for (int i = 0; i < split.length; i++) {
            String bundle = split[i].trim();
            bundleQuery.append("-bundleName:").append(bundle);
            if (i != split.length - 1) {
                bundleQuery.append(" AND ");
            }
        }
        bundleQuery.append(")");

        solrQuery.addFilterQuery(bundleQuery.toString());
    }

    if (filterQuery != null) {
        solrQuery.addFilterQuery(filterQuery);
    }

    QueryResponse response;
    try {
        // solr.set
        response = solr.query(solrQuery);
    } catch (SolrServerException e) {
        System.err.println("Error using query " + query);
        throw e;
    }
    return response;
}