List of usage examples for org.apache.solr.client.solrj SolrQuery setQuery
public SolrQuery setQuery(String query)
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 ww.j a v a 2s . co 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.databasepreservation.visualization.utils.SolrUtils.java
public static <T extends Serializable> IndexResult<T> find(SolrClient index, Class<T> classToRetrieve, Filter filter, Sorter sorter, Sublist sublist, Facets facets) throws GenericException, RequestNotValidException { IndexResult<T> ret;//from w ww.j a v a 2 s . c o m SolrQuery query = new SolrQuery(); query.setQuery(parseFilter(filter)); query.setSorts(parseSorter(sorter)); query.setStart(sublist.getFirstElementIndex()); query.setRows(sublist.getMaximumElementCount()); parseAndConfigureFacets(facets, query); try { QueryResponse response = index.query(getIndexName(classToRetrieve), query); ret = queryResponseToIndexResult(response, classToRetrieve, facets); } catch (SolrServerException | IOException | org.apache.solr.client.solrj.impl.HttpSolrClient.RemoteSolrException e) { String message = e.getMessage(); String bodytag = "<body>"; if (message != null && message.contains(bodytag)) { message = message.substring(message.indexOf(bodytag) + bodytag.length(), message.indexOf("</body>")); message = message.replaceAll("\\<[^>]*?>", ""); } throw new GenericException("Could not query index, message: " + message, e); } return ret; }
From source file:com.databasepreservation.visualization.utils.SolrUtils.java
public static <T extends Serializable> IndexResult<T> find(SolrClient index, Class<T> classToRetrieve, Filter filter, Sorter sorter, Sublist sublist, Facets facets, RodaUser user, boolean showInactive) throws GenericException, RequestNotValidException { IndexResult<T> ret;//from w w w.j a va 2 s . c o m SolrQuery query = new SolrQuery(); query.setQuery(parseFilter(filter)); query.setSorts(parseSorter(sorter)); query.setStart(sublist.getFirstElementIndex()); query.setRows(sublist.getMaximumElementCount()); parseAndConfigureFacets(facets, query); if (hasPermissionFilters(classToRetrieve)) { query.addFilterQuery(getFilterQueries(user, showInactive)); } try { QueryResponse response = index.query(getIndexName(classToRetrieve), query); ret = queryResponseToIndexResult(response, classToRetrieve, facets); } catch (SolrServerException | IOException e) { throw new GenericException("Could not query index", e); } return ret; }
From source file:com.databasepreservation.visualization.utils.SolrUtils.java
public static <T extends Serializable> IndexResult<T> find(SolrClient index, Class<T> classToRetrieve, String tableUUID, Filter filter, Sorter sorter, Sublist sublist, Facets facets) throws GenericException, RequestNotValidException { IndexResult<T> ret;/* w w w.jav a2s .c om*/ SolrQuery query = new SolrQuery(); query.setQuery(parseFilter(filter)); query.setSorts(parseSorter(sorter)); query.setStart(sublist.getFirstElementIndex()); query.setRows(sublist.getMaximumElementCount()); parseAndConfigureFacets(facets, query); try { QueryResponse response = index.query(getTableCollectionName(tableUUID), query); ret = queryResponseToIndexResult(response, classToRetrieve, facets); } catch (SolrServerException | IOException e) { throw new GenericException("Could not query index", e); } return ret; }
From source file:com.databasepreservation.visualization.utils.SolrUtils.java
public static InputStream findCSV(SolrClient index, String collection, Filter filter, Sorter sorter, Sublist sublist, List<String> fields) throws GenericException, RequestNotValidException { SolrQuery query = new SolrQuery(); query.setQuery(parseFilter(filter)); query.setSorts(parseSorter(sorter)); if (sublist != null) { query.setStart(sublist.getFirstElementIndex()); query.setRows(sublist.getMaximumElementCount()); }//from w ww.j ava 2s .c om query.setFields(fields.toArray(new String[0])); LOGGER.debug("CSV export query object: " + query.toString()); LOGGER.debug("CSV export query: " + query.toQueryString()); try { QueryRequest queryRequest = new QueryRequest(query); queryRequest.setResponseParser(new InputStreamResponseParser("csv")); QueryResponse response = queryRequest.process(index, collection); Object stream = response.getResponse().get("stream"); if (stream instanceof InputStream) { return (InputStream) stream; } else { throw new GenericException( "Result was not an input stream. Its string representation was: " + stream.toString()); } } catch (SolrServerException | IOException e) { throw new GenericException("Could not query index", e); } }
From source file:com.databasepreservation.visualization.utils.SolrUtils.java
public static String getSolrQuery(Filter filter, Sorter sorter, Sublist sublist, Facets facets) throws GenericException, RequestNotValidException { SolrQuery query = new SolrQuery(); query.setQuery(parseFilter(filter)); // query.setSorts(parseSorter(sorter)); query.setStart(sublist.getFirstElementIndex()); query.setRows(sublist.getMaximumElementCount()); // parseAndConfigureFacets(facets, query); return query.toQueryString(); }
From source file:com.digitalpebble.storm.crawler.solr.persistence.SolrSpout.java
License:Apache License
private void populateBuffer() { // TODO Sames as the ElasticSearchSpout? // TODO Use the cursor feature? // https://cwiki.apache.org/confluence/display/solr/Pagination+of+Results SolrQuery query = new SolrQuery(); query.setQuery("*:*").addFilterQuery("nextFetchDate:[* TO NOW]").setStart(lastStartOffset) .setRows(this.bufferSize); if (StringUtils.isNotBlank(diversityField)) { query.addFilterQuery(String.format("{!collapse field=%s}", diversityField)); query.set("expand", "true").set("expand.rows", diversityBucketSize); }/*from w w w .j a v a2s . c om*/ try { QueryResponse response = connection.getClient().query(query); SolrDocumentList docs = new SolrDocumentList(); if (StringUtils.isNotBlank(diversityField)) { // Add the main documents collapsed by the CollapsingQParser // plugin docs.addAll(response.getResults()); Map<String, SolrDocumentList> expandedResults = response.getExpandedResults(); for (String key : expandedResults.keySet()) { docs.addAll(expandedResults.get(key)); } } else { docs = response.getResults(); } int numhits = response.getResults().size(); // no more results? if (numhits == 0) lastStartOffset = 0; else lastStartOffset += numhits; for (SolrDocument doc : docs) { String url = (String) doc.get("url"); // is already being processed - skip it! if (beingProcessed.containsKey(url)) continue; Metadata metadata = new Metadata(); String mdAsString = (String) doc.get("metadata"); // get the serialized metadata information if (mdAsString != null) { // parse the string and generate the MD accordingly // url.path: http://www.lemonde.fr/ // depth: 1 String[] kvs = mdAsString.split("\n"); for (String pair : kvs) { String[] kv = pair.split(": "); if (kv.length != 2) { LOG.info("Invalid key value pair {}", pair); continue; } metadata.addValue(kv[0], kv[1]); } } buffer.add(new Values(url, metadata)); } } catch (Exception e) { LOG.error("Can't query Solr: {}", e); } }
From source file:com.digitalpebble.stormcrawler.solr.persistence.SolrSpout.java
License:Apache License
private void populateBuffer() { // TODO Sames as the ElasticSearchSpout? // TODO Use the cursor feature? // https://cwiki.apache.org/confluence/display/solr/Pagination+of+Results SolrQuery query = new SolrQuery(); query.setQuery("*:*").addFilterQuery("nextFetchDate:[* TO NOW]").setStart(lastStartOffset) .setRows(this.bufferSize); if (StringUtils.isNotBlank(diversityField)) { query.addFilterQuery(String.format("{!collapse field=%s}", diversityField)); query.set("expand", "true").set("expand.rows", diversityBucketSize); }//from w w w. ja v a2s .co m try { QueryResponse response = connection.getClient().query(query); SolrDocumentList docs = new SolrDocumentList(); if (StringUtils.isNotBlank(diversityField)) { // Add the main documents collapsed by the CollapsingQParser // plugin docs.addAll(response.getResults()); Map<String, SolrDocumentList> expandedResults = response.getExpandedResults(); for (String key : expandedResults.keySet()) { docs.addAll(expandedResults.get(key)); } } else { docs = response.getResults(); } int numhits = response.getResults().size(); // no more results? if (numhits == 0) lastStartOffset = 0; else lastStartOffset += numhits; String prefix = mdPrefix.concat("."); for (SolrDocument doc : docs) { String url = (String) doc.get("url"); // is already being processed - skip it! if (beingProcessed.containsKey(url)) continue; Metadata metadata = new Metadata(); Iterator<String> keyIterators = doc.getFieldNames().iterator(); while (keyIterators.hasNext()) { String key = keyIterators.next(); if (key.startsWith(prefix)) { Collection<Object> values = doc.getFieldValues(key); key = StringUtils.replace(key, prefix, "", 1); Iterator<Object> valueIterator = values.iterator(); while (valueIterator.hasNext()) { String value = (String) valueIterator.next(); metadata.addValue(key, value); } } } buffer.add(new Values(url, metadata)); } } catch (Exception e) { LOG.error("Can't query Solr: {}", e); } }
From source file:com.doculibre.constellio.services.FacetServicesImpl.java
License:Open Source License
public static SolrQuery toSolrQuery(SimpleSearch simpleSearch, int start, int row, boolean includeSingleValueFacets, boolean notIncludedOnly, List<String> customFieldFacets, List<String> customQueryFacets, ConstellioUser user) { String solrServerName = simpleSearch.getCollectionName(); RecordCollectionServices collectionServices = ConstellioSpringUtils.getRecordCollectionServices(); RecordCollection collection = collectionServices.get(solrServerName); SolrServices solrServices = ConstellioSpringUtils.getSolrServices(); Boolean usesDisMax = solrServices.usesDisMax(collection); SolrQuery query; if (!collection.isOpenSearch()) { query = SearchServicesImpl.toSolrQuery(simpleSearch, usesDisMax, true, includeSingleValueFacets, notIncludedOnly);//from w ww.j a va 2 s .c om } else { query = SearchServicesImpl.toSolrQuery(simpleSearch, usesDisMax, false, true, false); } query.setParam(ConstellioSolrQueryParams.COLLECTION_NAME, simpleSearch.getCollectionName()); query.setParam(ConstellioSolrQueryParams.LUCENE_QUERY, simpleSearch.getLuceneQuery(includeSingleValueFacets, true)); query.setParam(ConstellioSolrQueryParams.SIMPLE_SEARCH, simpleSearch.toSimpleParams().toString()); if (user != null) { query.setParam(ConstellioSolrQueryParams.USER_ID, "" + user.getId()); } if (StringUtils.isEmpty(query.getQuery())) { query.setQuery(SimpleSearch.SEARCH_ALL); query.setRequestHandler("/elevate"); } query.set("shards.qt", "/elevate"); query.setRequestHandler("/elevate"); query.setRows(row); query.setStart(start); query.setHighlight(true); query.setHighlightFragsize(100); query.setHighlightSnippets(2); query.setFacet(true); query.setFacetLimit(400); query.setFacetMinCount(1); if (collection.isOpenSearch()) { query.setParam("openSearchURL", collection.getOpenSearchURL()); Locale locale = simpleSearch.getSingleSearchLocale(); if (locale != null) { query.setParam("lang", locale.getLanguage()); } } else { for (CollectionFacet collectionFacet : collection.getCollectionFacets()) { if (customFieldFacets == null && collectionFacet.isFieldFacet()) { IndexField indexField = collectionFacet.getFacetField(); String indexFieldName = indexField.getName(); if (!notIncludedOnly) { query.addFacetField(indexFieldName); } else { SearchedFacet searchedFacet = simpleSearch.getSearchedFacet(indexFieldName); if (searchedFacet != null) { if (!searchedFacet.getIncludedValues().isEmpty()) { StringBuffer sbEx = new StringBuffer(); sbEx.append("{!ex=dt}"); // sbEx.append("{!ex="); // boolean first = true; // for (String includedValue : searchedFacet.getIncludedValues()) { // if (first) { // first = false; // } else { // sbEx.append(","); // } // sbEx.append(includedValue); // } // sbEx.append("}"); // query.setParam("facet.field", sbEx.toString() + indexFieldName); query.addFacetField(sbEx.toString() + indexFieldName); } else { query.addFacetField(indexFieldName); } } } } else if (customQueryFacets == null && collectionFacet.isQueryFacet()) { // Modification Rida, remplacement de collectionFacet.getLabels() par // collectionFacet.getLabelledValues() // for (I18NLabel valueLabels : collectionFacet.getLabels()) { for (I18NLabel valueLabels : collectionFacet.getLabelledValues()) { String facetQuery = valueLabels.getKey(); query.addFacetQuery(facetQuery); } } } if (customFieldFacets != null) { for (String facetField : customFieldFacets) { if (!notIncludedOnly) { query.addFacetField(facetField); } else { StringBuffer sbEx = new StringBuffer(); sbEx.append("{!ex=dt}"); // sbEx.append("{!ex="); // boolean first = true; // for (String includedValue : searchedFacet.getIncludedValues()) { // if (first) { // first = false; // } else { // sbEx.append(","); // } // sbEx.append(includedValue); // } // sbEx.append("}"); query.setParam("facet.field", sbEx.toString() + facetField); } } } if (customQueryFacets != null) { for (String facetQuery : customQueryFacets) { query.addFacetQuery(facetQuery); } } } return query; }
From source file:com.doculibre.constellio.services.IndexFieldServicesImpl.java
License:Open Source License
@SuppressWarnings("unchecked") @Override//w w w. j a v a 2 s.c o m public List<String> suggestValues(IndexField indexField, String text) { List<String> values = new ArrayList<String>(); RecordCollection collection = indexField.getRecordCollection(); SolrServices solrServices = ConstellioSpringUtils.getSolrServices(); SolrServer solrServer = solrServices.getSolrServer(collection); if (solrServer != null) { SolrQuery query = new SolrQuery(); query.setRequestHandler("/admin/luke"); query.setParam(CommonParams.FL, indexField.getName()); query.setParam(LukeRequestHandler.NUMTERMS, "" + 100); if (text != null) { query.setQuery(indexField.getName() + ":" + text + "*"); } if (collection.isOpenSearch()) { query.setParam("openSearchURL", collection.getOpenSearchURL()); } try { QueryResponse queryResponse = solrServer.query(query); NamedList<Object> fields = (NamedList<Object>) queryResponse.getResponse().get("fields"); if (fields != null) { NamedList<Object> field = (NamedList<Object>) fields.get(indexField.getName()); if (field != null) { NamedList<Object> topTerms = (NamedList<Object>) field.get("topTerms"); if (topTerms != null) { for (Map.Entry<String, Object> topTerm : topTerms) { String topTermKey = topTerm.getKey(); if (text == null || topTermKey.toLowerCase().startsWith(text.toLowerCase())) { values.add(topTerm.getKey()); } } } } } } catch (SolrServerException e) { throw new RuntimeException(e); } } return values; }