List of usage examples for org.apache.solr.client.solrj SolrQuery setQuery
public SolrQuery setQuery(String query)
From source file:eu.europeana.core.querymodel.query.SolrQueryUtil.java
License:EUPL
public static SolrQuery createFromQueryParams(Map<String, String[]> params, QueryAnalyzer queryAnalyzer, Locale locale, RecordDefinition recordDefinition) throws EuropeanaQueryException { SolrQuery solrQuery = new SolrQuery(); if (params.containsKey("query") || params.containsKey("query1")) { if (!params.containsKey("query")) { // support advanced search solrQuery.setQuery(queryAnalyzer.createAdvancedQuery(params, locale)); } else {/*ww w . j a va 2 s. c o m*/ if (params.containsKey("zoeken_in") && !params.get("zoeken_in")[0].equalsIgnoreCase("text")) { String zoekenIn = params.get("zoeken_in")[0]; solrQuery.setQuery(zoekenIn + ":\"" + queryAnalyzer.sanitizeAndTranslate(params.get("query")[0], locale) + "\""); // only get the first one } else { solrQuery.setQuery(queryAnalyzer.sanitizeAndTranslate(params.get("query")[0], locale)); // only get the first one } } } else { throw new EuropeanaQueryException(QueryProblem.MALFORMED_QUERY.toString()); } if (solrQuery.getQuery().trim().length() == 0) { // throw exception when no query is specified throw new EuropeanaQueryException(QueryProblem.MALFORMED_QUERY.toString()); } if (params.containsKey("start")) { try { Integer start = Integer.valueOf(params.get("start")[0]); solrQuery.setStart(start); } catch (NumberFormatException e) { // if number exception is thrown take default setting 0 (hardening parameter handling) } } if (params.containsKey("rows")) { try { Integer rows = Integer.valueOf(params.get("rows")[0]); solrQuery.setRows(rows); } catch (NumberFormatException e) { // number exception is thrown take default setting 12 (hardening parameter handling) } } if (solrQuery.getQueryType() == null) { solrQuery.setQueryType( queryAnalyzer.findSolrQueryType(solrQuery.getQuery(), recordDefinition).toString()); } // set sort field if (params.containsKey("sortBy") && !params.get("sortBy")[0].isEmpty()) { String sortField = params.get("sortBy")[0]; if (sortField.equalsIgnoreCase("title")) { sortField = "sort_title"; } else if (sortField.equalsIgnoreCase("creator")) { sortField = "sort_creator"; } else if (sortField.equalsIgnoreCase("year")) { sortField = "sort_all_year"; } else if (sortField.equalsIgnoreCase("random")) { sortField = SolrQueryUtil.createRandomSortKey(); } if (params.containsKey("sortOrder") && !params.get("sortOrder")[0].isEmpty()) { String sortOrder = params.get("sortOrder")[0]; if (sortOrder.equalsIgnoreCase("desc")) { solrQuery.setSortField(sortField, SolrQuery.ORDER.desc); } } else { solrQuery.setSortField(sortField, SolrQuery.ORDER.asc); } } //set constraints List<String> filterQueries = new ArrayList<String>(); if (params.containsKey("qf")) { Collections.addAll(filterQueries, params.get("qf")); } if (params.containsKey("qf[]")) { Collections.addAll(filterQueries, params.get("qf[]")); } if (filterQueries != null) { for (String filterQuery : filterQueries) { solrQuery.addFilterQuery(filterQuery); } } // determine which fields will be returned if (params.containsKey("fl")) { String displayFields = params.get("fl")[0]; if (!displayFields.isEmpty()) { solrQuery.setFields(displayFields); } } // find rq and add to filter queries if (params.containsKey("rq") && params.get("rq").length != 0) { String refineSearchFilterQuery = queryAnalyzer.createRefineSearchFilterQuery(params, locale); if (!refineSearchFilterQuery.isEmpty()) { solrQuery.addFilterQuery(refineSearchFilterQuery); } } solrQuery.setFilterQueries(SolrQueryUtil.getFilterQueriesAsPhrases(solrQuery)); return solrQuery; }
From source file:eu.europeana.web.timeline.server.SolrServiceImpl.java
License:EUPL
@Override public List<Year> retrieveYears() { List<Year> years = new ArrayList<Year>(); SolrQuery solrQuery = new SolrQuery(); solrQuery.setQuery("*:*"); solrQuery.setFacet(true);/*from ww w .j ava 2 s. c o m*/ solrQuery.addFacetField("YEAR"); solrQuery.setRows(0); solrQuery.setFacetLimit(20); solrQuery.setFacetSort(FacetParams.FACET_SORT); solrQuery.setSortField("YEAR", SolrQuery.ORDER.desc); solrQuery.setFilterQueries("YEAR:[* TO *]", "-YEAR:0000"); LOG.fine(String.format("Query : %s", solrQuery)); QueryResponse response = null; try { response = solrServer.query(solrQuery); List<FacetField> facetFields = response.getFacetFields(); for (FacetField field : facetFields) { for (FacetField.Count count : field.getValues()) { Year year = new Year(); year.setYear(count.getName()); year.setAvailableItemCount(count.getCount()); if (count.getCount() > 0) { years.add(year); } } } } catch (SolrServerException e) { LOG.severe(String.format("Error during Solr query for years : %s", e)); } return response == null ? null : years; }
From source file:eu.europeana.web.timeline.server.SolrServiceImpl.java
License:EUPL
@Override public List<Item> retrieveBriefItems(String query, Integer offset, Integer limit) { SolrQuery solrQuery = new SolrQuery(); solrQuery.setQuery(query); solrQuery.setParam("fl", "title,YEAR,TYPE,europeana_uri,europeana_object,dc_creator"); // todo: some of these fields are unused solrQuery.setFilterQueries("YEAR:[* TO *]", "title:[* TO *]", "-YEAR:0000"); solrQuery.setRows(limit);/* ww w . j a v a 2s .c o m*/ solrQuery.setStart(offset); QueryResponse response = null; try { response = solrServer.query(solrQuery); LOG.fine(String.format("Query : %s Offset : %d Limit %d", query, offset, limit)); } catch (SolrServerException e) { LOG.severe(String.format("Error during Solr query for items: %s", e)); } if (response != null) { return response.getBeans(Item.class); } else { return null; } }
From source file:eumetsat.pn.solr.webapp.SolrApp.java
@Override protected Map<String, Object> search(String searchTerms, String filterString, int from, int size) { Map<String, Object> data = new HashMap<>(); // put "session" parameters here rightaway so it can be used in template even when empty result data.put("search_terms", searchTerms == null ? "*:*" : searchTerms); data.put("filter_terms", filterString == null ? "" : filterString); Stopwatch stopwatch = Stopwatch.createStarted(); try {/*w ww . j a v a 2 s . c o m*/ SolrQuery query = new SolrQuery(); query.setQuery(searchTerms); query.setStart(from == -1 ? 0 : from); query.setRows(size); query.setFields("id", "title", "description", "thumbnail_s", "status_s", "score"); // "exclude" xmldoc query.setParam("qt", "edismax"); // probably default already // boosting query.setParam("qf", "title^10 description status^2 keywords"); // set highlight, see also https://cwiki.apache.org/confluence/display/solr/Standard+Highlighter query.setHighlight(true).setHighlightSnippets(17).setHighlightFragsize(0); // http://wiki.apache.org/solr/HighlightingParameters query.setParam("hl.preserveMulti", "true"); // preserve non-matching keywords query.setParam("hl.fl", "id", "title", "description", "keywords"); // "*"); // select fields to highlight // override defaults: query.setParam("hl.simple.pre", "<em><strong>"); query.setParam("hl.simple.post", "</strong></em>"); // configure faceting, see also http://wiki.apache.org/solr/SolrFacetingOverview and http://wiki.apache.org/solr/Solrj and https://wiki.apache.org/solr/SimpleFacetParameters and query.setFacet(true).setFacetLimit(4).setFacetMissing(true); // not in API, probably normally set in schema.xml: query.setParam("facet.field", "satellite_s", "instrument_s", "category", "societalBenefitArea_ss", "distribution_ss"); // filtering Set<String> hiddenFacets = new HashSet<>(); // hiding no facets yet if (filterString != null && !filterString.isEmpty()) { Multimap<String, String> filterTermsMap = parseFiltersTerms(filterString); if (filterTermsMap.size() > 0) { for (Map.Entry<String, String> entry : filterTermsMap.entries()) { String filter = " +" + entry.getKey() + ":" + entry.getValue(); query.addFilterQuery(filter); hiddenFacets.add(entry.getKey() + ":" + entry.getValue()); } } } data.put("tohide", hiddenFacets); log.debug("Solr query: {}", query); QueryResponse response = solr.query(query); if (response == null) { log.error("Response from {} is null!", this.name); data.put("total_hits", 0); data = addMessage(data, MessageLevel.danger, "Response is null from " + this.name); } else { log.trace("Got response: {}", response); if (response.getStatus() == 0) { List<Map<String, Object>> resHits = new ArrayList<>(); SolrDocumentList results = response.getResults(); Map<String, Map<String, List<String>>> highlights = response.getHighlighting(); data.put("total_hits", results.getNumFound()); if (results.getNumFound() < 1) { addMessage(data, MessageLevel.info, "No results found!"); } data.put("max_score", results.getMaxScore()); Map<String, Object> pagination = computePaginationParams( ((Long) (data.get("total_hits"))).intValue(), from); data.put("pagination", pagination); for (SolrDocument result : results) { HashMap<String, Object> resHit = new HashMap<>(); String currentId = (String) result.getFieldValue("id"); Map<String, List<String>> currentHighlights = highlights.get(currentId); resHit.put("id", currentId); resHit.put("score", String.format("%.4g", result.getFieldValue("score"))); resHit.put("abstract", hightlightIfGiven(result, currentHighlights, "description")); resHit.put("title", hightlightIfGiven(result, currentHighlights, "title")); resHit.put("keywords", Joiner.on(", ").join( (Collection<String>) hightlightIfGiven(result, currentHighlights, "keywords"))); resHit.put("satellite", result.get("satellite_s")); resHit.put("thumbnail", result.get("thumbnail_s")); resHit.put("status", result.get("status_s")); resHit.put("distribution", result.get("distribution_ss")); resHits.add(resHit); } data.put("hits", resHits); // faceting information: List<FacetField> facets = response.getFacetFields(); log.trace("Facets ({}): {}", facets.size(), facets); //jsObj.get("facets").get("categories").get("terms") - then term und count // convert to format of Elasticsearch: Map<String, Object> facetsJson = new HashMap<>(); for (FacetField facet : facets) { Map<String, Object> facetMap = new HashMap<>(); facetMap.put("total", facet.getValueCount()); List<Map<String, Object>> terms = new ArrayList<>(); for (Count count : facet.getValues()) { if (count.getCount() > 0) { Map<String, Object> termMap = new HashMap<>(); termMap.put("count", count.getCount()); termMap.put("term", count.getName() == null ? "N/A" : count.getName()); terms.add(termMap); } } facetMap.put("terms", terms); facetsJson.put(facet.getName(), facetMap); } data.put("facets", facetsJson); } else { // non-OK resonse log.error("Received non-200 response: {}", response); data = addMessage(data, MessageLevel.danger, "Non 200 response: " + response.toString()); } } data.put("elapsed", (double) (stopwatch.elapsed(TimeUnit.MILLISECONDS)) / (double) 1000); log.trace("Prepared data for template: {}", data); } catch (SolrServerException e) { log.error("Error querying Solr", e); addMessage(data, MessageLevel.danger, "Error during search: " + e.getMessage()); // errorResponse(e); } stopwatch.stop(); return data; }
From source file:fi.vm.sade.organisaatio.service.search.OrganisaatioSearchService.java
License:EUPL
public List<OrganisaatioPerustieto> searchHierarchy(final SearchCriteria searchCriteria) { long time = System.currentTimeMillis(); final List<String> kunta = searchCriteria.getKunta(); final List<String> restrictionList = searchCriteria.getOidRestrictionList(); final String organisaatioTyyppi = searchCriteria.getOrganisaatioTyyppi(); final List<String> kieli = searchCriteria.getKieli(); String searchStr = searchCriteria.getSearchStr(); String oid = searchCriteria.getOid(); SolrQuery q = createOrgQuery(searchCriteria, kunta, restrictionList, organisaatioTyyppi, kieli, searchStr, oid);//w w w . ja v a 2s. c o m q.set("fl", OID, PATH); // max rows to return q.setRows(10000); try { QueryResponse response = solr.query(q, METHOD.POST); LOG.debug("Sending query: " + q.getQuery() + ", filters: " + Joiner.on(" ").join(q.getFilterQueries())); LOG.debug("Search matched {} results, fetching docs...", response.getResults().getNumFound()); if (response.getResults().getNumFound() == 0) { // short circuit no results here return Lists.newArrayList(); } Set<String> oids = Sets.newHashSet(); Set<String> paths = Sets.newHashSet(); for (SolrDocument doc : response.getResults()) { if (!rootOrganisaatioOid.equals(doc.getFieldValue(OID))) { paths.add((String) doc.getFieldValue(OID)); } if (!searchCriteria.getSkipParents()) { for (Object path : doc.getFieldValues(PATH)) { if (!rootOrganisaatioOid.equals(path)) { oids.add((String) path); } } } oids.add((String) doc.getFirstValue(OID)); } // get the actual docs q = new SolrQuery("*:*"); q.setFields("*"); addDateFilters(searchCriteria, q); // filter out oph (TODO do not index oph) q.addFilterQuery(String.format("-%s:%s", OID, rootOrganisaatioOid)); // filter out types in upper hierarchy if (organisaatioTyyppi != null && organisaatioTyyppi.length() > 0) { final Set<String> limitToTypes = orgTypeLimit.get(organisaatioTyyppi); q.addFilterQuery(String.format("%s:(%s)", ORGANISAATIOTYYPPI, Joiner.on(" ").join(limitToTypes))); } // restrictions if (restrictionList.size() > 0) { // filter based on restriction list q.addFilterQuery(String.format("%s:(%s)", PATH, Joiner.on(" ").join(restrictionList))); } String query = String.format("%s:(%s)", OID, Joiner.on(" ").join(oids)); if (paths.size() > 0) { query = query + String.format(" %s:(%s)", PATH, Joiner.on(" ").join(paths)); } q.setQuery(query); q.setRows(10000); response = solr.query(q, METHOD.POST); LOG.debug("Search time :{} ms.", (System.currentTimeMillis() - time)); final SolrDocumentToOrganisaatioPerustietoTypeFunction converter = new SolrDocumentToOrganisaatioPerustietoTypeFunction( oids); final List<OrganisaatioPerustieto> result = Lists .newArrayList(Lists.transform(response.getResults(), converter)); LOG.debug("Total time :{} ms.", (System.currentTimeMillis() - time)); return result; } catch (SolrServerException e) { LOG.error("Error executing search, q={}", q.getQuery()); throw new RuntimeException(e); } }
From source file:fr.aliacom.obm.common.contact.ContactDao.java
License:Open Source License
private List<Contact> searchContact(AccessToken at, List<AddressBook> addrBooks, Connection con, String querys, int limit) throws MalformedURLException, SQLException { List<Contact> ret = new LinkedList<Contact>(); Set<Integer> evtIds = new HashSet<Integer>(); PreparedStatement ps = null;//from ww w. j a v a 2 s. c om ResultSet rs = null; try { if (addrBooks.size() > 0) { SolrHelper solrHelper = solrHelperFactory.createClient(at); CommonsHttpSolrServer solrServer = solrHelper.getSolrContact(); StringBuilder sb = new StringBuilder(); sb.append("-is:archive "); sb.append("+addressbookId:("); int idx = 0; for (AddressBook book : addrBooks) { if (idx > 0) { sb.append(" OR "); } sb.append(book.getUid()); idx++; } sb.append(")"); if (querys != null && !"".equals(querys)) { sb.append(" +(displayname:("); sb.append(querys.toLowerCase()); sb.append("*) OR firstname:("); sb.append(querys.toLowerCase()); sb.append("*) OR lastname:("); sb.append(querys.toLowerCase()); sb.append("*) OR email:("); sb.append(querys.toLowerCase()); sb.append("*))"); } SolrQuery params = new SolrQuery(); params.setQuery(sb.toString()); params.setIncludeScore(true); params.setRows(limit); try { QueryResponse resp = solrServer.query(params); SolrDocumentList results = resp.getResults(); if (logger.isDebugEnabled()) { logger.debug("SOLR query time for " + results.size() + " results: " + resp.getElapsedTime() + "ms."); } for (int i = 0; i < limit && i < results.size(); i++) { SolrDocument doc = results.get(i); Map<String, Object> payload = doc.getFieldValueMap(); evtIds.add((Integer) payload.get("id")); } } catch (SolrServerException e) { logger.error("Error querying server for '" + sb.toString() + " url: " + ClientUtils.toQueryString(params, false), e); } } IntegerSQLCollectionHelper eventIds = new IntegerSQLCollectionHelper(evtIds); String q = "SELECT " + CONTACT_SELECT_FIELDS + ", now() as last_sync FROM Contact, ContactEntity WHERE " + "contactentity_contact_id=contact_id AND contact_archive != 1 AND contact_id IN (" + eventIds.asPlaceHolders() + ")"; ps = con.prepareStatement(q); eventIds.insertValues(ps, 1); rs = ps.executeQuery(); Map<Integer, Contact> entityContact = new HashMap<Integer, Contact>(); int i = 0; while (rs.next() && i < limit) { int entity = rs.getInt("contactentity_entity_id"); if (!entityContact.containsKey(entity)) { Contact ct = contactFromCursor(rs); entityContact.put(ct.getEntityId(), ct); ret.add(ct); i++; } } rs.close(); rs = null; if (!entityContact.isEmpty()) { loadPhones(con, entityContact); loadIMIdentifiers(con, entityContact); loadWebsites(con, entityContact); loadAddresses(at, con, entityContact); loadEmails(con, entityContact); loadBirthday(con, entityContact); loadAnniversary(con, entityContact); } } finally { obmHelper.cleanup(null, ps, rs); } return ret; }
From source file:fr.aliacom.obm.common.contact.ContactDaoJdbcImpl.java
License:Open Source License
private List<Contact> searchContact(AccessToken at, Collection<AddressBook> addrBooks, Connection con, String query, int limit, Integer offset) throws MalformedURLException, SQLException, LocatorClientException { Set<Integer> contactIds = new HashSet<Integer>(); if (addrBooks.size() > 0) { SolrHelper solrHelper = solrHelperFactory.createClient(at); CommonsHttpSolrServer solrServer = solrHelper.getSolrContact(); StringBuilder sb = new StringBuilder(); sb.append("-is:archive "); sb.append("+addressbookId:("); int idx = 0; for (AddressBook book : addrBooks) { if (idx > 0) { sb.append(" OR "); }/*from w ww. j a va 2 s.c om*/ sb.append(book.getUid()); idx++; } sb.append(")"); if (query != null && !"".equals(query)) { sb.append(" +(displayname:("); sb.append(query.toLowerCase()); sb.append("*) OR firstname:("); sb.append(query.toLowerCase()); sb.append("*) OR lastname:("); sb.append(query.toLowerCase()); sb.append("*) OR email:("); sb.append(query.toLowerCase()); sb.append("*))"); } SolrQuery params = new SolrQuery(); params.setQuery(sb.toString()); params.setIncludeScore(true); params.setRows(limit); params.setStart(offset); try { QueryResponse resp = solrServer.query(params); SolrDocumentList results = resp.getResults(); if (logger.isDebugEnabled()) { logger.debug( "SOLR query time for " + results.size() + " results: " + resp.getElapsedTime() + "ms."); } for (int i = 0; i < limit && i < results.size(); i++) { SolrDocument doc = results.get(i); Map<String, Object> payload = doc.getFieldValueMap(); contactIds.add((Integer) payload.get("id")); } } catch (SolrServerException e) { logger.error("Error querying server for '" + sb.toString() + " url: " + ClientUtils.toQueryString(params, false), e); } } ContactResults contactResults = loadContactsFromDB(contactIds, con, limit); if (!contactResults.contactMap.isEmpty()) { loadPhones(con, contactResults.contactMap); loadIMIdentifiers(con, contactResults.contactMap); loadWebsites(con, contactResults.contactMap); loadAddresses(at, con, contactResults.contactMap); loadEmails(con, contactResults.contactMap); loadBirthday(con, contactResults.contactMap); loadAnniversary(con, contactResults.contactMap); } return contactResults.contactList; }
From source file:fr.aliasource.index.solr.SolrClient.java
License:GNU General Public License
private SolrParams createParams(String query) { SolrQuery sq = new SolrQuery(); sq.setQuery(query); sq.setFilterQueries("type:" + getType()); sq.setIncludeScore(true);/*from w w w . j av a 2 s .c o m*/ sq.setRows(Integer.MAX_VALUE); sq.addSortField("date", SolrQuery.ORDER.desc); return sq; }
From source file:fr.cnes.sitools.metacatalogue.csw.extractor.CswMetadataExtractor.java
License:Open Source License
@Override public void execute(MetadataContainer data) throws ProcessException { logger = getLogger(context);/* w ww .j a v a 2s .c om*/ Element metadata = data.getXmlData(); String resourcesFolder = HarvesterSettings.getInstance().getResourcePath(schemaName, "solr-fields.xsl"); File sFileXSL = new File(resourcesFolder); List<Element> children = metadata.getChildren(); List<MetadataRecords> listMetadataRecords = new ArrayList<MetadataRecords>(); for (Element child : children) { try { XSLTUtils utils = XSLTUtils.getInstance(); InputStream stream = utils.transform(sFileXSL, child); // BufferedReader stdIn = new BufferedReader(new InputStreamReader(stream)); // String userInput; // // while ((userInput = stdIn.readLine()) != null) { // System.out.println(userInput); // } Element doc = Xml.loadStream(stream); List<Field> fields = getFields(doc); List<Error> errors = getErrors(doc); CswGeometryExtractor extractor = new CswGeometryExtractor(); MetadataRecords mdRecords = new MetadataRecords(fields, errors); mdRecords = extractor.extractGeometry(child, mdRecords, this.schemaName); if (mdRecords != null) { // add the custom attributes addCustomAttributes(child, mdRecords, conf.getAttributes()); // public services addField(mdRecords, String.valueOf(conf.isPublicServices()), MetacatalogField._PUBLIC_SERVICES.getField()); HarvestStatus status = (HarvestStatus) context.getAttributes().get(ContextAttributes.STATUS); // modified List<String> frmt = HarvesterSettings.getInstance().getDateFormats(); String modified = DateUtils.format(status.getStartDate(), frmt); addField(mdRecords, modified, MetacatalogField.MODIFIED.getField()); // created Date creationDate = null; SolrServer server = (SolrServer) context.getAttributes().get("INDEXER_SERVER"); SolrQuery solrQuery = new SolrQuery(); String identifier = getId(doc); if (identifier != null) { try { solrQuery.setQuery(MetacatalogField.IDENTIFIER.getField() + ":" + String.format("\"%s\"", identifier.toString())); QueryResponse rsp = server.query(solrQuery); SolrDocumentList listDocuments = rsp.getResults(); if (!listDocuments.isEmpty()) { SolrDocument solrDocument = listDocuments.get(0); creationDate = (Date) solrDocument.get(MetacatalogField.CREATED.getField()); } } catch (SolrServerException e) { e.printStackTrace(); } } String created; if (creationDate != null) { created = DateUtils.format(creationDate, frmt); } else { created = DateUtils.format(status.getStartDate(), frmt); } addField(mdRecords, created, MetacatalogField.CREATED.getField()); listMetadataRecords.add(mdRecords); } } catch (TransformerConfigurationException e) { logger.log(Level.WARNING, e.getMessage(), e); } catch (TransformerException e) { logger.log(Level.WARNING, e.getMessage(), e); } catch (Exception e) { logger.log(Level.WARNING, e.getMessage(), e); } } if (data.getMetadataRecords() == null) { data.setMetadataRecords(listMetadataRecords); } else { data.getMetadataRecords().addAll(listMetadataRecords); } next.execute(data); }
From source file:fr.cnes.sitools.metacatalogue.CswMetadataIndexerTestCase.java
License:Open Source License
private void assertMetadataInserted() throws SolrServerException { SolrQuery query = new SolrQuery(); query.setQuery("*:*"); QueryResponse rsp = server.query(query); assertNotNull(rsp);/* w w w. java2 s .c o m*/ SolrDocumentList listDoc = rsp.getResults(); assertNotNull(listDoc); assertEquals(nbFieldsExpected, listDoc.getNumFound()); }