List of usage examples for org.apache.solr.request SolrQueryRequest getContext
Map<Object, Object> getContext();
From source file:alba.solr.common.MySimpleFloatFunction.java
License:Apache License
@SolrRequestHandler(name = "functions", value = "/functions.alba") public List<CallableFunction> functions(SolrQueryRequest req, SolrQueryResponse rsp) { List<CallableFunction> list = new ArrayList<CallableFunction>(); Map<String, CallableFunction> functions = (Map<String, CallableFunction>) req.getContext() .get(Loader.FUNCTIONS);/*from ww w .j a v a 2 s .c o m*/ if (functions == null) { logger.error("functions null!"); } for (String s : functions.keySet()) { list.add(functions.get(s)); } return list; }
From source file:alba.solr.core.DynamicQueryParser.java
License:Apache License
@Override public QParser createParser(String qstr, SolrParams localParams, SolrParams params, SolrQueryRequest req) { postFilters = (Map<String, CallableFunction>) req.getContext().get(Loader.POSTFILTERS); cachedResults = (Map<Object, CachedResult>) req.getContext().get(Loader.CACHEDRESULTS); CallableFunction function = postFilters.get(localParams.get("name")); return new QParser(qstr, localParams, params, req) { private ValueSource functionParamValueSource; @Override//from ww w . jav a 2 s .c om public Query parse() throws SyntaxError { ValueSource vs = null; Map<String, Object> params = new HashMap<String, Object>(); String funcStr = localParams.get(QueryParsing.V, null); int nParams = 1; if ((function != null) && (function.getMethod() != null)) { nParams = function.getMethod().getParameterCount(); } boolean cache = false; Object functionParams[] = new Object[nParams]; int i = 1; //in the 0th positions there's the parametric function result (as ValueSource) Iterator<String> it = localParams.getParameterNamesIterator(); while (it.hasNext()) { String p = it.next(); /* does it make sense to be able to switch on/off the cache? what would it imply? if ("cache".equals(p)) { cache = ("1".equals(localParams.get(p))); } */ if (!"v".equals(p) && !"cache".equals(p) && !"type".equals(p) && !"name".equals(p)) { params.put(p, localParams.get(p)); Class<?> expectedType = function.getMethod().getParameters()[i].getType(); if (expectedType == Integer.class) { functionParams[i] = Integer.parseInt(localParams.get(p)); } else { logger.error("param " + i + " should be of type " + expectedType + " but I don't know how to parse it."); // right place for magic params? like passing the request & so on.. ? } i++; } } if ((funcStr != null) && (funcStr != "")) { Query funcQ = subQuery(funcStr, FunctionQParserPlugin.NAME).getQuery(); //if (funcQ instanceof FunctionQuery) { //what else could be? vs = ((FunctionQuery) funcQ).getValueSource(); functionParamValueSource = vs; //todo must call getValues when using it! } else { logger.error("!!!! no function defined for the postfilter???"); } DynamicQuery dq = new DynamicQuery(vs, cache, function, functionParams, cachedResults); dq.setParams(params); return dq; } }; }
From source file:alba.solr.searchcomponents.AlbaRequestHandler.java
License:Apache License
public void handleRequestBody(SolrQueryRequest req, SolrQueryResponse rsp) throws Exception { // TODO Auto-generated method stub /* List<SearchComponent> components = new ArrayList<SearchComponent>(); // w ww .ja va 2s .c om MySearchComponent msc = new MySearchComponent(); ResponseBuilder rb = new ResponseBuilder(req, rsp, components); msc.process(rb);*/ //rsp.add("hello", rb.rsp.getValues()); req.getContext().put(Loader.FUNCTIONS, functions); Object params[] = new Object[2]; params[0] = req; params[1] = rsp; // what if this method calls rsp.add( .. ) ???? Object result = this.function.getMethod().invoke(this.function.getInstance(), params); if (Map.class.isAssignableFrom(result.getClass())) { // if we got a Map, just return it as-is rsp.add(this.sectionName, result); } else // if we got anything else, try to serialize it! if (List.class.isAssignableFrom(result.getClass())) { for (Object o : (List) result) { DocumentObjectBinder dob = new DocumentObjectBinder(); SolrInputDocument sd = dob.toSolrInputDocument(o); SolrDocument dest = ClientUtils.toSolrDocument(sd); HashMap<Object, Object> nl = (HashMap<Object, Object>) dest.get("functionDescriptor"); //rsp.add(nl.get("name").toString(), dest2); rsp.add(null, dest); } } if (StaticResource.class.isAssignableFrom(result.getClass())) { FilteredShowFileRequestHandler file = new FilteredShowFileRequestHandler(); file.init(new NamedList()); //to initialize internal variables - but in this way it will NOT get the proper configuration from SolrConfig! ModifiableSolrParams solrParams = new ModifiableSolrParams(req.getParams()); StaticResource resource = ((StaticResource) result); solrParams.set("file", resource.getName()); //TODO Proper mapping here!! //solrParams.set("contentType", "text/xml;charset=utf-8"); solrParams.set("contentType", resource.getContentType()); req.setParams(solrParams); file.handleRequest(req, rsp); // logger.error("returning the content of " + ); } else { // unable to do any kind of serialization.. just add the result and let the ResponseWriter handle it rsp.add(null, result); } }
From source file:alba.solr.transformers.Transformer.java
License:Apache License
@SuppressWarnings("unchecked") @Override//ww w . j av a 2s. c o m public TransformerWithContext create(String field, SolrParams params, SolrQueryRequest req) { // TODO Auto-generated method stub Logger logger = LoggerFactory.getLogger(this.getClass().getName()); transformers = (Map<String, CallableFunction>) req.getContext().get(Loader.DOCTRANSFORMERS); String name = params.get("name"); if (name == null) { logger.error("no param name found for transformer " + this.getClass().getName()); return null; } CallableFunction function = transformers.get(name); if (function == null) { logger.error("no mapped function found for transformer " + name); } PluggableDocTransformer docTransformer = new PluggableDocTransformer(function); docTransformer.context = req.getContext(); return docTransformer; }
From source file:lux.solr.LuxResponseWriter.java
License:Mozilla Public License
@Override public String getContentType(SolrQueryRequest request, SolrQueryResponse response) { String contentType = (String) request.getContext().get("lux.contentType"); if (contentType == null) { contentType = request.getParams().get("lux.contentType"); }//from w w w.j a v a 2 s . com if (contentType != null) { return contentType; } else { return "text/html; charset=UTF-8"; } }
From source file:lux.solr.XQueryComponent.java
License:Mozilla Public License
private String handleEXPathResponse(SolrQueryRequest req, SolrQueryResponse rsp, NamedList<Object> xpathResults, XdmItem xpathResult) {/* ww w . j av a 2 s . com*/ XdmNode expathResponse; expathResponse = (XdmNode) xpathResult; HttpServletRequest httpReq = (HttpServletRequest) req.getContext() .get(SolrQueryContext.LUX_HTTP_SERVLET_REQUEST); HttpServletResponse httpResp = (HttpServletResponse) httpReq .getAttribute(SolrQueryContext.LUX_HTTP_SERVLET_RESPONSE); TinyElementImpl responseNode = (TinyElementImpl) expathResponse.getUnderlyingNode(); // Get the status code and message String status = responseNode.getAttributeValue("", "status"); String message = responseNode.getAttributeValue("", "message"); int istatus = 200; if (status != null) { try { istatus = Integer.parseInt(status); } catch (NumberFormatException e) { throw new LuxException("Non-numeric response status code: " + status); } if (istatus >= 400) { try { if (message != null) { httpResp.sendError(istatus, message); } else { httpResp.sendError(istatus); } } catch (IOException e) { logger.error("sendError failed: " + e.getMessage()); } } // if an error is generated by the query, call sendError? httpResp.setStatus(istatus); } // Get the body, its charset and content-type and return the body to be used as the result XdmSequenceIterator children = expathResponse.axisIterator(Axis.CHILD); while (children.hasNext()) { XdmNode child = (XdmNode) children.next(); net.sf.saxon.s9api.QName childName = child.getNodeName(); if (!childName.getNamespaceURI().equals(EXPATH_HTTP_NS)) { logger.warn("ignoring unknown response child element: " + childName.getClarkName()); continue; } if (childName.getLocalName().equals("body")) { // got the body String src = child.getAttributeValue(qnameFor("src")); if (src != null) { throw new LuxException("The body/@src attribute is not supported"); } String characterSet = child.getAttributeValue(qnameFor("charset")); if (characterSet == null) { characterSet = "utf-8"; } String contentType = child.getAttributeValue(qnameFor("content-type")); if (contentType != null) { contentType += "; charset=" + characterSet; } if (contentType == null) { contentType = req.getParams().get("lux.contentType", contentType); if (contentType != null) { contentType = contentType.replaceFirst("(?<=; charset=).*", characterSet); } } if (contentType != null) { req.getContext().put("lux.contentType", contentType); } XdmSequenceIterator bodyKids = child.axisIterator(Axis.CHILD); while (bodyKids.hasNext()) { XdmNode result = (XdmNode) bodyKids.next(); String err = safeAddResult(xpathResults, result); if (err != null) { return err; } } } else if (childName.getLocalName().equals("header")) { String header = child.getAttributeValue(qnameFor("name")); String value = child.getAttributeValue(qnameFor("value")); httpResp.addHeader(header, value); } else if (childName.getLocalName().equals("multipart")) { throw new LuxException("Multipart HTTP responses not implemented"); } } /* if (istatus >= 300 && istatus < 400) { httpResp.sendRedirect(location); } */ if (expathResponse != null) { // TODO: pass the expathResponse to the LuxResponseWriter -- why? req.getContext().put("expath:response", expathResponse); } return null; }
From source file:lux.solr.XQueryComponent.java
License:Mozilla Public License
private String buildHttpInfo(SolrQueryRequest req) { StringBuilder buf = new StringBuilder(); buf.append(String.format("<http>")); buf.append("<params>"); SolrParams params = req.getParams(); Iterator<String> paramNames = params.getParameterNamesIterator(); while (paramNames.hasNext()) { String param = paramNames.next(); if (param.startsWith("lux.")) { continue; }//from w w w . ja va2s .com buf.append(String.format("<param name=\"%s\">", param)); String[] values = params.getParams(param); for (String value : values) { buf.append(String.format("<value>%s</value>", xmlEscape(value))); } buf.append("</param>"); } buf.append("</params>"); String pathInfo = params.get(LUX_PATH_INFO); if (pathInfo != null) { buf.append("<path-info>").append(xmlEscape(pathInfo)).append("</path-info>"); } Map<Object, Object> context = req.getContext(); String webapp = (String) context.get("webapp"); if (webapp == null) { webapp = ""; } buf.append("<context-path>").append(webapp).append("</context-path>"); // TODO: headers, path, etc? buf.append("</http>"); return buf.toString(); }
From source file:lux.solr.XQueryComponent.java
License:Mozilla Public License
private XdmValue buildEXPathRequest(Compiler compiler, Evaluator evaluator, SolrQueryRequest req) throws XPathException { LinkedTreeBuilder builder = new LinkedTreeBuilder( compiler.getProcessor().getUnderlyingConfiguration().makePipelineConfiguration()); builder.startDocument(0);//from w w w. jav a 2s . c o m builder.startElement(fQNameFor("http", EXPATH_HTTP_NS, "request"), AnyType.getInstance(), 0, 0); builder.namespace(new NamespaceBinding("http", EXPATH_HTTP_NS), 0); Request requestWrapper = (Request) req.getContext().get(SolrQueryContext.LUX_HTTP_SERVLET_REQUEST); addAttribute(builder, "method", requestWrapper.getMethod()); addAttribute(builder, "servlet", requestWrapper.getServletPath()); HttpServletRequest httpReq = (HttpServletRequest) requestWrapper.getRequest(); addAttribute(builder, "path", httpReq.getServletPath()); String pathInfo = requestWrapper.getPathInfo(); if (pathInfo != null) { addAttribute(builder, "path-info", pathInfo); } builder.startContent(); // child elements StringBuilder buf = new StringBuilder(); // authority buf.append(requestWrapper.getScheme()).append("://").append(requestWrapper.getServerName()).append(':') .append(requestWrapper.getServerPort()); String authority = buf.toString(); addSimpleElement(builder, "authority", authority); // url buf.append(httpReq.getServletPath()); if (httpReq.getQueryString() != null) { buf.append('?').append(httpReq.getQueryString()); } String url = buf.toString(); addSimpleElement(builder, "url", url); // context-root addSimpleElement(builder, "context-root", httpReq.getContextPath()); // path - just one part: we don't do any parsing of the path builder.startElement(fQNameFor("http", EXPATH_HTTP_NS, "path"), BuiltInAtomicType.UNTYPED_ATOMIC, 0, 0); builder.startContent(); addSimpleElement(builder, "part", httpReq.getServletPath()); builder.endElement(); // params Iterator<String> paramNames = req.getParams().getParameterNamesIterator(); while (paramNames.hasNext()) { String param = paramNames.next(); String[] values = req.getParams().getParams(param); for (String value : values) { builder.startElement(fQNameFor("http", EXPATH_HTTP_NS, "param"), BuiltInAtomicType.UNTYPED_ATOMIC, 0, 0); addAttribute(builder, "name", param); addAttribute(builder, "value", value); builder.startContent(); builder.endElement(); } } // headers Enumeration<String> headerNames = httpReq.getHeaderNames(); while (headerNames.hasMoreElements()) { String headerName = headerNames.nextElement(); Enumeration<String> headerValues = httpReq.getHeaders(headerName); while (headerValues.hasMoreElements()) { String value = headerValues.nextElement(); builder.startElement(fQNameFor("http", EXPATH_HTTP_NS, "header"), BuiltInAtomicType.UNTYPED_ATOMIC, 0, 0); addAttribute(builder, "name", headerName); addAttribute(builder, "value", value); builder.startContent(); builder.endElement(); } } ArrayList<XdmItem> resultSequence = null; if (req.getContentStreams() != null) { resultSequence = new ArrayList<XdmItem>(); handleContentStreams(builder, req, resultSequence, evaluator); } builder.endElement(); // end request builder.endDocument(); XdmNode expathReq = new XdmNode(builder.getCurrentRoot()); if (resultSequence == null) { return expathReq; } resultSequence.add(0, expathReq); return new XdmValue(resultSequence); }
From source file:net.yacy.cora.federate.solr.connector.EmbeddedSolrConnector.java
License:Open Source License
/** * get a new query request. MUST be closed after usage using close() * @param params/* w w w . ja v a 2 s . c o m*/ * @return */ public SolrQueryRequest request(final SolrParams params) { SolrQueryRequest req = new SolrQueryRequestBase(this.core, params) { }; req.getContext().put("path", SELECT); req.getContext().put("webapp", CONTEXT); return req; }
From source file:net.yacy.cora.federate.solr.responsewriter.GSAResponseWriter.java
License:Open Source License
@Override public void write(final Writer writer, final SolrQueryRequest request, final SolrQueryResponse rsp) throws IOException { assert rsp.getValues().get("responseHeader") != null; assert rsp.getValues().get("response") != null; long start = System.currentTimeMillis(); SimpleOrderedMap<Object> responseHeader = (SimpleOrderedMap<Object>) rsp.getResponseHeader(); DocList response = ((ResultContext) rsp.getValues().get("response")).docs; @SuppressWarnings("unchecked") SimpleOrderedMap<Object> highlighting = (SimpleOrderedMap<Object>) rsp.getValues().get("highlighting"); Map<String, LinkedHashSet<String>> snippets = OpensearchResponseWriter.highlighting(highlighting); Map<Object, Object> context = request.getContext(); // parse response header ResHead resHead = new ResHead(); NamedList<?> val0 = (NamedList<?>) responseHeader.get("params"); resHead.rows = Integer.parseInt((String) val0.get(CommonParams.ROWS)); resHead.offset = response.offset(); // equal to 'start' resHead.numFound = response.matches(); //resHead.df = (String) val0.get("df"); //resHead.q = (String) val0.get("q"); //resHead.wt = (String) val0.get("wt"); //resHead.status = (Integer) responseHeader.get("status"); //resHead.QTime = (Integer) responseHeader.get("QTime"); //resHead.maxScore = response.maxScore(); // write header writer.write(XML_START);// ww w . j a v a 2 s.c o m String query = request.getParams().get("originalQuery"); String site = getContextString(context, "site", ""); String sort = getContextString(context, "sort", ""); String client = getContextString(context, "client", ""); String ip = getContextString(context, "ip", ""); String access = getContextString(context, "access", ""); String entqr = getContextString(context, "entqr", ""); OpensearchResponseWriter.solitaireTag(writer, "TM", Long.toString(System.currentTimeMillis() - start)); OpensearchResponseWriter.solitaireTag(writer, "Q", query); paramTag(writer, "sort", sort); paramTag(writer, "output", "xml_no_dtd"); paramTag(writer, "ie", "UTF-8"); paramTag(writer, "oe", "UTF-8"); paramTag(writer, "client", client); paramTag(writer, "q", query); paramTag(writer, "site", site); paramTag(writer, "start", Integer.toString(resHead.offset)); paramTag(writer, "num", Integer.toString(resHead.rows)); paramTag(writer, "ip", ip); paramTag(writer, "access", access); // p - search only public content, s - search only secure content, a - search all content, both public and secure paramTag(writer, "entqr", entqr); // query expansion policy; (entqr=1) -- Uses only the search appliance's synonym file, (entqr=1) -- Uses only the search appliance's synonym file, (entqr=3) -- Uses both standard and local synonym files. // body introduction final int responseCount = response.size(); writer.write("<RES SN=\"" + (resHead.offset + 1) + "\" EN=\"" + (resHead.offset + responseCount) + "\">"); writer.write(lb); // The index (1-based) of the first and last search result returned in this result set. writer.write("<M>" + resHead.numFound + "</M>"); writer.write(lb); // The estimated total number of results for the search. writer.write("<FI/>"); writer.write(lb); // Indicates that document filtering was performed during this search. int nextStart = resHead.offset + responseCount; int nextNum = Math.min(resHead.numFound - nextStart, responseCount < resHead.rows ? 0 : resHead.rows); int prevStart = resHead.offset - resHead.rows; if (prevStart >= 0 || nextNum > 0) { writer.write("<NB>"); if (prevStart >= 0) { writer.write("<PU>"); XML.escapeCharData("/gsa/search?q=" + request.getParams().get(CommonParams.Q) + "&site=" + site + "&lr=&ie=UTF-8&oe=UTF-8&output=xml_no_dtd&client=" + client + "&access=" + access + "&sort=" + sort + "&start=" + prevStart + "&sa=N", writer); // a relative URL pointing to the NEXT results page. writer.write("</PU>"); } if (nextNum > 0) { writer.write("<NU>"); XML.escapeCharData("/gsa/search?q=" + request.getParams().get(CommonParams.Q) + "&site=" + site + "&lr=&ie=UTF-8&oe=UTF-8&output=xml_no_dtd&client=" + client + "&access=" + access + "&sort=" + sort + "&start=" + nextStart + "&num=" + nextNum + "&sa=N", writer); // a relative URL pointing to the NEXT results page. writer.write("</NU>"); } writer.write("</NB>"); } writer.write(lb); // parse body SolrIndexSearcher searcher = request.getSearcher(); DocIterator iterator = response.iterator(); String urlhash = null; for (int i = 0; i < responseCount; i++) { int id = iterator.nextDoc(); Document doc = searcher.doc(id, SOLR_FIELDS); List<IndexableField> fields = doc.getFields(); // pre-scan the fields to get the mime-type String mime = ""; for (IndexableField value : fields) { String fieldName = value.name(); if (CollectionSchema.content_type.getSolrFieldName().equals(fieldName)) { mime = value.stringValue(); break; } } // write the R header for a search result writer.write("<R N=\"" + (resHead.offset + i + 1) + "\"" + (i == 1 ? " L=\"2\"" : "") + (mime != null && mime.length() > 0 ? " MIME=\"" + mime + "\"" : "") + ">"); writer.write(lb); //List<String> texts = new ArrayList<String>(); List<String> descriptions = new ArrayList<String>(); List<String> collections = new ArrayList<String>(); int size = 0; boolean title_written = false; // the solr index may contain several; we take only the first which should be the visible tag in <title></title> String title = null; for (IndexableField value : fields) { String fieldName = value.name(); // apply generic matching rule String stag = field2tag.get(fieldName); if (stag != null) { OpensearchResponseWriter.solitaireTag(writer, stag, value.stringValue()); continue; } // if the rule is not generic, use the specific here if (CollectionSchema.id.getSolrFieldName().equals(fieldName)) { urlhash = value.stringValue(); continue; } if (CollectionSchema.sku.getSolrFieldName().equals(fieldName)) { OpensearchResponseWriter.solitaireTag(writer, GSAToken.U.name(), value.stringValue()); OpensearchResponseWriter.solitaireTag(writer, GSAToken.UE.name(), value.stringValue()); continue; } if (CollectionSchema.title.getSolrFieldName().equals(fieldName) && !title_written) { title = value.stringValue(); OpensearchResponseWriter.solitaireTag(writer, GSAToken.T.name(), highlight(title, query)); //texts.add(value.stringValue()); title_written = true; continue; } if (CollectionSchema.description_txt.getSolrFieldName().equals(fieldName)) { descriptions.add(value.stringValue()); //texts.adds(description); continue; } if (CollectionSchema.last_modified.getSolrFieldName().equals(fieldName)) { Date d = new Date(Long.parseLong(value.stringValue())); writer.write("<FS NAME=\"date\" VALUE=\"" + HeaderFramework.formatGSAFS(d) + "\"/>\n"); //OpensearchResponseWriter.solitaireTag(writer, GSAToken.CACHE_LAST_MODIFIED.getSolrFieldName(), HeaderFramework.formatRFC1123(d)); //texts.add(value.stringValue()); continue; } if (CollectionSchema.load_date_dt.getSolrFieldName().equals(fieldName)) { Date d = new Date(Long.parseLong(value.stringValue())); OpensearchResponseWriter.solitaireTag(writer, GSAToken.CRAWLDATE.name(), HeaderFramework.formatRFC1123(d)); //texts.add(value.stringValue()); continue; } if (CollectionSchema.size_i.getSolrFieldName().equals(fieldName)) { size = value.stringValue() != null && value.stringValue().length() > 0 ? Integer.parseInt(value.stringValue()) : -1; continue; } if (CollectionSchema.collection_sxt.getSolrFieldName().equals(fieldName)) { collections.add(value.stringValue()); continue; } //System.out.println("superfluous field: " + fieldName + ": " + value.stringValue()); // this can be avoided setting the enableLazyFieldLoading = false in solrconfig.xml } // compute snippet from texts LinkedHashSet<String> snippet = urlhash == null ? null : snippets.get(urlhash); OpensearchResponseWriter.removeSubsumedTitle(snippet, title); OpensearchResponseWriter.solitaireTag(writer, GSAToken.S.name(), snippet == null || snippet.size() == 0 ? (descriptions.size() > 0 ? descriptions.get(0) : "") : OpensearchResponseWriter.getLargestSnippet(snippet)); OpensearchResponseWriter.solitaireTag(writer, GSAToken.GD.name(), descriptions.size() > 0 ? descriptions.get(0) : ""); String cols = collections.toString(); if (collections.size() > 0) OpensearchResponseWriter.solitaireTag(writer, "COLS" /*SPECIAL!*/, collections.size() > 1 ? cols.substring(1, cols.length() - 1).replaceAll(" ", "") : collections.get(0)); writer.write("<HAS><L/><C SZ=\""); writer.write(Integer.toString(size / 1024)); writer.write("k\" CID=\""); writer.write(urlhash); writer.write("\" ENC=\"UTF-8\"/></HAS>\n"); if (YaCyVer == null) YaCyVer = yacyVersion.thisVersion().getName() + "/" + Switchboard.getSwitchboard().peers.mySeed().hash; OpensearchResponseWriter.solitaireTag(writer, GSAToken.ENT_SOURCE.name(), YaCyVer); OpensearchResponseWriter.closeTag(writer, "R"); } writer.write("</RES>"); writer.write(lb); writer.write(XML_STOP); }