List of usage examples for org.apache.solr.client.solrj SolrQuery setHighlight
public SolrQuery setHighlight(boolean b)
From source file:org.ambraproject.search.service.SolrSearchService.java
License:Apache License
private SolrQuery createKeywordFacetQuery(String queryString) { SolrQuery query = new SolrQuery(); query.setTimeAllowed(queryTimeout);// w w w.j a v a 2s . c om query.setIncludeScore(false); query.setHighlight(false); query.setRows(0); query.set("defType", "dismax"); query.set("qf", "doc_partial_body"); query.addFacetField("doc_partial_type"); query.setFacetLimit(MAX_FACET_SIZE); query.setFacetMinCount(MIN_FACET_COUNT); // Add a filter to ensure that Solr never returns partial documents query.addFilterQuery(createFilterPartialDocuments()); query.setQuery(queryString); return query; }
From source file:org.ambraproject.service.feed.FeedServiceImpl.java
License:Apache License
@Override public Document getSearchArticles(final FeedSearchParameters sParams) throws ApplicationException { log.debug("Performing RSS Feed Search"); SolrQuery query = null; if (sParams.getUnformattedQuery().equals("")) { log.debug("Simple Rss Search performed on the String: " + sParams.getQuery()); query = new SolrQuery(sParams.getQuery()); query.set("defType", "dismax"); } else {// w w w. j av a 2 s .c om log.debug("Simple Rss Search performed on the String: " + sParams.getUnformattedQuery()); query = new SolrQuery(sParams.getUnformattedQuery()); } query.setTimeAllowed(queryTimeout); query.setIncludeScore(true); // The relevance (of each results element) to the search terms. query.setHighlight(false); // request only fields that we need query.setFields("id", "title_display", "publication_date", "author_without_collab_display", "author_collab_only_display", "author_display", "volume", "issue", "article_type", "subject_hierarchy", "abstract_primary_display", "copyright"); query.addFilterQuery("doc_type:full"); query.addFilterQuery("!article_type_facet:\"Issue Image\""); query.addFacetField("cross_published_journal_key"); // Form field description: "Journals". Query Filter. if (sParams.getFilterJournals() != null && sParams.getFilterJournals().length > 0) { query.addFilterQuery(createFilterLimitForJournals(sParams.getFilterJournals())); } // Form field description: "Subject Categories". Query Filter. if (sParams.getFilterSubjects() != null && sParams.getFilterSubjects().length > 0) { query.addFilterQuery(createFilterLimitForSubject(sParams.getFilterSubjects())); } // Form field description: "Article Types". Query Filter. if (sParams.getFilterArticleType() != null && sParams.getFilterArticleType().length > 0) { query.addFilterQuery(createFilterLimitForArticleType(sParams.getFilterArticleType())); } //Set the sort ordering for results, if applicable. setSort(query, sParams); //If the keywords parameter is specified, we need to change what field we're querying against //aka, body, conclusions, materials and methods ... etc ... if (sParams.getFilterKeyword().length() > 0) { String fieldkey = sParams.getFilterKeyword(); if (!validKeywords.containsKey(fieldkey)) { throw new ApplicationException("Invalid filterKeyword value of " + fieldkey + " specified"); } String fieldName = (String) validKeywords.get(fieldkey); query.set("qf", fieldName); } query.set("wt", "xml"); Document result = null; try { result = solrHttpService.makeSolrRequestForRss(query.toString()); } catch (SolrException e) { e.printStackTrace(); } return result; }
From source file:org.ambraproject.service.search.SolrSearchService.java
License:Apache License
private SolrQuery createQuery(String queryString, int startPage, int pageSize, boolean useDismax) { SolrQuery query = new SolrQuery(queryString); query.setTimeAllowed(queryTimeout);// w w w .java 2 s . c o m query.setIncludeScore(true); // The relevance (of each results element) to the search terms. query.setHighlight(false); if (useDismax) { query.set("defType", "dismax"); } //TODO: Put The "options" from the "queryField" picklist into a config file. //This list matches the "options" from the "queryField" picklist on unformattedSearch.ftl, //without the "date" fields. query.setStart(startPage * pageSize); // Which results element to return first in this batch. query.setRows(pageSize); // The number of results elements to return. // request only fields that we need to display query.setFields("id", "score", "title_display", "publication_date", "eissn", "journal", "article_type", "author_display", "abstract", "abstract_primary_display", "striking_image", "figure_table_caption", "subject", "expression_of_concern", "retraction"); query.addFacetField("subject_facet"); query.addFacetField("author_facet"); query.addFacetField("editor_facet"); query.addFacetField("article_type_facet"); query.addFacetField("affiliate_facet"); query.set("facet.method", "fc"); query.setFacetLimit(MAX_FACET_SIZE); query.setFacetMinCount(MIN_FACET_COUNT); // Add a filter to ensure that Solr never returns partial documents query.addFilterQuery(createFilterFullDocuments()); return query; }
From source file:org.ambraproject.service.search.SolrSearchService.java
License:Apache License
private SolrQuery createFacetsQuery(String queryString, String field, boolean useDismax) { SolrQuery query = new SolrQuery(queryString); query.setTimeAllowed(queryTimeout);/* www .j av a2 s.co m*/ query.setIncludeScore(false); query.setHighlight(false); query.setRows(0); query.setFacetLimit(MAX_FACET_SIZE); query.setFacetMinCount(MIN_FACET_COUNT); if (useDismax) { query.set("defType", "dismax"); } query.addFacetField(field); // Add a filter to ensure that Solr never returns partial documents query.addFilterQuery(createFilterFullDocuments()); return query; }
From source file:org.apache.jackrabbit.oak.plugins.index.solr.query.FilterQueryParser.java
License:Apache License
static SolrQuery getQuery(Filter filter, QueryIndex.IndexPlan plan, OakSolrConfiguration configuration) { SolrQuery solrQuery = new SolrQuery(); setDefaults(solrQuery, configuration); StringBuilder queryBuilder = new StringBuilder(); FullTextExpression ft = filter.getFullTextConstraint(); if (ft != null) { queryBuilder.append(parseFullTextExpression(ft, configuration)); queryBuilder.append(' '); } else if (filter.getFulltextConditions() != null) { Collection<String> fulltextConditions = filter.getFulltextConditions(); for (String fulltextCondition : fulltextConditions) { queryBuilder.append(fulltextCondition).append(" "); }//from ww w . ja v a2 s . co m } List<QueryIndex.OrderEntry> sortOrder = plan.getSortOrder(); if (sortOrder != null) { for (QueryIndex.OrderEntry orderEntry : sortOrder) { SolrQuery.ORDER order; if (QueryIndex.OrderEntry.Order.ASCENDING.equals(orderEntry.getOrder())) { order = SolrQuery.ORDER.asc; } else { order = SolrQuery.ORDER.desc; } String sortingField; if (JcrConstants.JCR_PATH.equals(orderEntry.getPropertyName())) { sortingField = partialEscape(configuration.getPathField()).toString(); } else if (JcrConstants.JCR_SCORE.equals(orderEntry.getPropertyName())) { sortingField = "score"; } else { if (orderEntry.getPropertyName().indexOf('/') >= 0) { log.warn("cannot sort on relative properties, ignoring {} clause", orderEntry); continue; // sorting by relative properties not supported until index time aggregation is supported } sortingField = partialEscape( getSortingField(orderEntry.getPropertyType().tag(), orderEntry.getPropertyName())) .toString(); } solrQuery.addOrUpdateSort(sortingField, order); } } Collection<Filter.PropertyRestriction> propertyRestrictions = filter.getPropertyRestrictions(); if (propertyRestrictions != null && !propertyRestrictions.isEmpty()) { for (Filter.PropertyRestriction pr : propertyRestrictions) { if (pr.isNullRestriction()) { // can not use full "x is null" continue; } // facets if (QueryImpl.REP_FACET.equals(pr.propertyName)) { solrQuery.setFacetMinCount(1); solrQuery.setFacet(true); String value = pr.first.getValue(Type.STRING); solrQuery.addFacetField( value.substring(QueryImpl.REP_FACET.length() + 1, value.length() - 1) + "_facet"); } // native query support if (SolrQueryIndex.NATIVE_SOLR_QUERY.equals(pr.propertyName) || SolrQueryIndex.NATIVE_LUCENE_QUERY.equals(pr.propertyName)) { String nativeQueryString = String.valueOf(pr.first.getValue(pr.first.getType())); if (isSupportedHttpRequest(nativeQueryString)) { // pass through the native HTTP Solr request String requestHandlerString = nativeQueryString.substring(0, nativeQueryString.indexOf('?')); if (!"select".equals(requestHandlerString)) { if (requestHandlerString.charAt(0) != '/') { requestHandlerString = "/" + requestHandlerString; } solrQuery.setRequestHandler(requestHandlerString); } String parameterString = nativeQueryString.substring(nativeQueryString.indexOf('?') + 1); for (String param : parameterString.split("&")) { String[] kv = param.split("="); if (kv.length != 2) { throw new RuntimeException("Unparsable native HTTP Solr query"); } else { // more like this if ("/mlt".equals(requestHandlerString)) { if ("stream.body".equals(kv[0])) { kv[0] = "q"; String mltFlString = "mlt.fl="; int mltFlIndex = parameterString.indexOf(mltFlString); if (mltFlIndex > -1) { int beginIndex = mltFlIndex + mltFlString.length(); int endIndex = parameterString.indexOf('&', beginIndex); String fields; if (endIndex > beginIndex) { fields = parameterString.substring(beginIndex, endIndex); } else { fields = parameterString.substring(beginIndex); } kv[1] = "_query_:\"{!dismax qf=" + fields + " q.op=OR}" + kv[1] + "\""; } } if ("mlt.fl".equals(kv[0]) && ":path".equals(kv[1])) { // rep:similar passes the path of the node to find similar documents for in the :path // but needs its indexed content to find similar documents kv[1] = configuration.getCatchAllField(); } } if ("/spellcheck".equals(requestHandlerString)) { if ("term".equals(kv[0])) { kv[0] = "spellcheck.q"; } solrQuery.setParam("spellcheck", true); } if ("/suggest".equals(requestHandlerString)) { if ("term".equals(kv[0])) { kv[0] = "suggest.q"; } solrQuery.setParam("suggest", true); } solrQuery.setParam(kv[0], kv[1]); } } return solrQuery; } else { queryBuilder.append(nativeQueryString); } } else { if (SolrQueryIndex.isIgnoredProperty(pr, configuration)) { continue; } String first = null; if (pr.first != null) { first = partialEscape(String.valueOf(pr.first.getValue(pr.first.getType()))).toString(); } String last = null; if (pr.last != null) { last = partialEscape(String.valueOf(pr.last.getValue(pr.last.getType()))).toString(); } String prField = configuration.getFieldForPropertyRestriction(pr); CharSequence fieldName = partialEscape(prField != null ? prField : pr.propertyName); if ("jcr\\:path".equals(fieldName.toString())) { queryBuilder.append(configuration.getPathField()); queryBuilder.append(':'); queryBuilder.append(first); } else { if (pr.first != null && pr.last != null && pr.first.equals(pr.last)) { queryBuilder.append(fieldName).append(':'); queryBuilder.append(first); } else if (pr.first == null && pr.last == null) { if (!queryBuilder.toString().contains(fieldName + ":")) { queryBuilder.append(fieldName).append(':'); queryBuilder.append('*'); } } else if ((pr.first != null && pr.last == null) || (pr.last != null && pr.first == null) || (!pr.first.equals(pr.last))) { // TODO : need to check if this works for all field types (most likely not!) queryBuilder.append(fieldName).append(':'); queryBuilder.append(createRangeQuery(first, last, pr.firstIncluding, pr.lastIncluding)); } else if (pr.isLike) { // TODO : the current parameter substitution is not expected to work well queryBuilder.append(fieldName).append(':'); queryBuilder.append(partialEscape(String.valueOf(pr.first.getValue(pr.first.getType())) .replace('%', '*').replace('_', '?'))); } else { throw new RuntimeException("[unexpected!] not handled case"); } } } queryBuilder.append(" "); } } if (configuration.useForPrimaryTypes()) { String[] pts = filter.getPrimaryTypes().toArray(new String[filter.getPrimaryTypes().size()]); StringBuilder ptQueryBuilder = new StringBuilder(); for (int i = 0; i < pts.length; i++) { String pt = pts[i]; if (i == 0) { ptQueryBuilder.append("("); } if (i > 0 && i < pts.length) { ptQueryBuilder.append("OR "); } ptQueryBuilder.append("jcr\\:primaryType").append(':').append(partialEscape(pt)).append(" "); if (i == pts.length - 1) { ptQueryBuilder.append(")"); ptQueryBuilder.append(' '); } } solrQuery.addFilterQuery(ptQueryBuilder.toString()); } if (filter.getQueryStatement() != null && filter.getQueryStatement().contains(QueryImpl.REP_EXCERPT)) { if (!solrQuery.getHighlight()) { // enable highlighting solrQuery.setHighlight(true); // defaults solrQuery.set("hl.fl", "*"); solrQuery.set("hl.encoder", "html"); solrQuery.set("hl.mergeContiguous", true); solrQuery.setHighlightSimplePre("<strong>"); solrQuery.setHighlightSimplePost("</strong>"); } } if (configuration.useForPathRestrictions()) { Filter.PathRestriction pathRestriction = filter.getPathRestriction(); if (pathRestriction != null) { String path = purgePath(filter, plan.getPathPrefix()); String fieldName = configuration.getFieldForPathRestriction(pathRestriction); if (fieldName != null) { if (pathRestriction.equals(Filter.PathRestriction.ALL_CHILDREN)) { solrQuery.addFilterQuery(fieldName + ':' + path); } else { queryBuilder.append(fieldName); queryBuilder.append(':'); queryBuilder.append(path); } } } } if (configuration.collapseJcrContentNodes()) { solrQuery.addFilterQuery("{!collapse field=" + configuration.getCollapsedPathField() + " min=" + configuration.getPathDepthField() + " hint=top_fc nullPolicy=expand}"); } if (queryBuilder.length() == 0) { queryBuilder.append("*:*"); } String escapedQuery = queryBuilder.toString(); solrQuery.setQuery(escapedQuery); if (log.isDebugEnabled()) { log.debug("JCR query {} has been converted to Solr query {}", filter.getQueryStatement(), solrQuery.toString()); } return solrQuery; }
From source file:org.apache.nutch.searcher.SolrBean.java
License:Apache License
public Hits search(Query query) throws IOException { // filter query string // final BooleanQuery bQuery = filters.filter(query); // final SolrQuery solrQuery = new SolrQuery(stringify(bQuery)); final SolrQuery solrQuery = new SolrQuery(); solrQuery.set("q", query.getQuery()); String a = query.getParams().getSortField(); solrQuery.setRows(query.getParams().getNumHits()); if (query.getParams().getSortField() == null) { // solrQuery.setFields(query.getParams().getDedupField(), "score", searchUID); query.getParams().setSortField("score"); } else {// ww w . j av a2 s. co m // solrQuery.setFields(query.getParams().getDedupField(), query // .getParams().getSortField(), searchUID); // solrQuery.setSortField(query.getParams().getSortField(), query // .getParams().isReverse() ? ORDER.asc : ORDER.desc); solrQuery.setSort(query.getParams().getSortField(), query.getParams().isReverse() ? ORDER.asc : ORDER.desc); } solrQuery.set("fl", "id,url,title,tstamp,type,content,segment,score"); solrQuery.setHighlight(true); solrQuery.set("hl.fl", "title,content"); solrQuery.set("hl.simple.pre", "<span class=highlight>"); solrQuery.set("hl.simple.post", "</span>"); solrQuery.set("defType", "edismax"); solrQuery.set("qf", "title^4 content"); QueryResponse response; try { response = solr.query(solrQuery); } catch (final SolrServerException e) { throw makeIOException(e); } final SolrDocumentList docList = response.getResults(); Map<String, Map<String, List<String>>> highlights = response.getHighlighting(); int qtime = response.getQTime(); final Hit[] hitArr = new Hit[docList.size()]; for (int i = 0; i < hitArr.length; i++) { final SolrDocument solrDoc = docList.get(i); String url = (String) solrDoc.getFieldValue("url"); String title = (String) solrDoc.getFieldValue("title"); String content = (String) solrDoc.getFieldValue("content"); final Object raw = solrDoc.getFirstValue(query.getParams().getSortField()); WritableComparable sortValue; if (raw instanceof Integer) { sortValue = new IntWritable(((Integer) raw).intValue()); } else if (raw instanceof Float) { sortValue = new FloatWritable(((Float) raw).floatValue()); } else if (raw instanceof String) { sortValue = new Text((String) raw); } else if (raw instanceof Long) { sortValue = new LongWritable(((Long) raw).longValue()); } else { throw new RuntimeException("Unknown sort value type!"); } final String dedupValue = (String) solrDoc.getFirstValue(query.getParams().getDedupField()); final String uniqueKey = (String) solrDoc.getFirstValue(searchUID); // hitArr[i] = new Hit(uniqueKey, sortValue, dedupValue); SolrHit hit = new SolrHit(uniqueKey, sortValue, dedupValue); SolrHitDetails details = buildDetails(solrDoc); details.setHit(hit); hit.setHitDetails(details); hit.setTitleHighlighted(title); int len = (content.length() > 100 ? 100 : content.length()); Summary.Fragment f = new Summary.Fragment(content.substring(0, len)); Summary summary = new Summary(); summary.add(f); hit.setSummary(summary); String titleHighlighted = ""; if (highlights.containsKey(url)) { Map<String, List<String>> snippets = highlights.get(url); if (snippets.containsKey("title")) { titleHighlighted = snippets.get("title").get(0); hit.setTitleHighlighted(titleHighlighted); } if (snippets.containsKey("content")) { f = new Summary.Fragment(snippets.get("content").get(0)); summary = new Summary(); summary.add(f); hit.setSummary(summary); } } hitArr[i] = hit; } return new Hits(docList.getNumFound(), hitArr); }
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>// ww w .j av a 2s . co 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.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 w w w . ja va 2 s . com 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.eclipse.rdf4j.sail.solr.SolrIndex.java
License:Open Source License
/** * Parse the passed query./*from w w w . j ava 2 s .co m*/ * * @param query * string * @return the parsed query * @throws ParseException * when the parsing brakes */ @Override protected Iterable<? extends DocumentScore> query(Resource subject, String query, URI propertyURI, boolean highlight) throws MalformedQueryException, IOException { SolrQuery q = prepareQuery(propertyURI, new SolrQuery(query)); if (highlight) { q.setHighlight(true); String field = (propertyURI != null) ? SearchFields.getPropertyField(propertyURI) : "*"; q.addHighlightField(field); q.setHighlightSimplePre(SearchFields.HIGHLIGHTER_PRE_TAG); q.setHighlightSimplePost(SearchFields.HIGHLIGHTER_POST_TAG); q.setHighlightSnippets(2); } QueryResponse response; if (q.getHighlight()) { q.addField("*"); } else { q.addField(SearchFields.URI_FIELD_NAME); } q.addField("score"); try { if (subject != null) { response = search(subject, q); } else { response = search(q); } } catch (SolrServerException e) { throw new IOException(e); } SolrDocumentList results = response.getResults(); final Map<String, Map<String, List<String>>> highlighting = response.getHighlighting(); return Iterables.transform(results, new Function<SolrDocument, DocumentScore>() { @Override public DocumentScore apply(SolrDocument document) { SolrSearchDocument doc = new SolrSearchDocument(document); Map<String, List<String>> docHighlighting = (highlighting != null) ? highlighting.get(doc.getId()) : null; return new SolrDocumentScore(doc, docHighlighting); } }); }
From source file:org.emonocot.persistence.dao.hibernate.SearchableDaoImpl.java
License:Open Source License
public List<Match> autocomplete(final String query, Integer pageSize, Map<String, String> selectedFacets) throws SolrServerException { SolrQuery solrQuery = new SolrQuery(); if (query != null && !query.trim().equals("")) { //String searchString = query.trim().replace(" ", "+"); solrQuery.setQuery(query);//from w w w . j ava 2s . co m } else { return new ArrayList<Match>(); } // Filter the searchable objects out solrQuery.addFilterQuery("base.class_searchable_b:" + isSearchableObject()); // Set additional result parameters //solrQuery.setRows(pageSize); int rows = 100; solrQuery.setRows(rows); if (selectedFacets != null && !selectedFacets.isEmpty()) { for (String facetName : selectedFacets.keySet()) { solrQuery.addFilterQuery(facetName + ":" + selectedFacets.get(facetName)); } } solrQuery.set("defType", "edismax"); solrQuery.set("qf", "autocomplete^3 autocompleteng"); solrQuery.set("pf", "autocompletenge"); solrQuery.set("fl", "autocomplete,id"); solrQuery.setHighlight(true); solrQuery.set("hl.fl", "autocomplete"); solrQuery.set("hl.snippets", 3); solrQuery.setHighlightSimplePre("<b>"); solrQuery.setHighlightSimplePost("</b>"); //solrQuery.setSortField("autocomplete", SolrQuery.ORDER.valueOf("desc")); /* solrQuery.set("group","true"); solrQuery.set("group.field", "autocomplete"); */ QueryResponse queryResponse = solrServer.query(solrQuery); List<Match> results = new ArrayList<Match>(); Map<String, Match> matchMap = new HashMap<String, Match>(); for (SolrDocument solrDocument : queryResponse.getResults()) { Match match = new Match(); String label = filter((String) solrDocument.get("autocomplete")); match.setLabel(label); match.setValue(label); matchMap.put((String) solrDocument.get("id"), match); results.add(match); } List<Match> distinctResults = removeDuplicates(results); List<Match> subResults1 = new ArrayList<Match>(); //ExactMatch List<Match> subResults2 = new ArrayList<Match>(); for (Match item : distinctResults) { if ((item.getLabel().toLowerCase().startsWith(query.toLowerCase()))) { subResults1.add(item); } else { subResults2.add(item); } } if (subResults1.size() > 0) { Collections.sort(subResults1); } /* Collections.sort(subResults1, new Comparator() { @Override public int compare(Object matchOne, Object matchTwo) { //use instanceof to verify the references are indeed of the type in question return ((Match)matchOne).getLabel() .compareTo(((Match)matchTwo).getLabel()); } }); */ subResults1.addAll(subResults2); List<Match> subResults = subResults1; List<Match> finalResults = new ArrayList<Match>(); if (subResults.size() > 10) { finalResults = subResults.subList(0, 10); } else { finalResults = subResults; } //subResults = finalResults; /* for(GroupCommand groupCommand : queryResponse.getGroupResponse().getValues()) { for (Group group : groupCommand.getValues()) { for (SolrDocument solrDocument : group.getResult()) { Match match = new Match(); String label = filter((String) solrDocument.get("autocomplete")); match.setLabel(label); match.setValue(label); matchMap.put((String) solrDocument.get("id"), match); results.add(match); } } } */ for (String documentId : matchMap.keySet()) { if (queryResponse.getHighlighting().containsKey(documentId)) { Map<String, List<String>> highlightedTerms = queryResponse.getHighlighting().get(documentId); if (highlightedTerms.containsKey("autocomplete")) { matchMap.get(documentId).setLabel(highlightedTerms.get("autocomplete").get(0)); } } } //return results; return finalResults; }