001: /**
002: * Licensed to the Apache Software Foundation (ASF) under one or more
003: * contributor license agreements. See the NOTICE file distributed with
004: * this work for additional information regarding copyright ownership.
005: * The ASF licenses this file to You under the Apache License, Version 2.0
006: * (the "License"); you may not use this file except in compliance with
007: * the License. You may obtain a copy of the License at
008: *
009: * http://www.apache.org/licenses/LICENSE-2.0
010: *
011: * Unless required by applicable law or agreed to in writing, software
012: * distributed under the License is distributed on an "AS IS" BASIS,
013: * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
014: * See the License for the specific language governing permissions and
015: * limitations under the License.
016: */package org.apache.solr.tst;
017:
018: import org.apache.lucene.search.*;
019: import org.apache.lucene.document.Document;
020:
021: import java.util.List;
022: import java.util.logging.Level;
023: import java.io.IOException;
024: import java.net.URL;
025:
026: import org.apache.solr.util.StrUtils;
027: import org.apache.solr.util.NamedList;
028: import org.apache.solr.search.DocSlice;
029: import org.apache.solr.search.QueryParsing;
030: import org.apache.solr.core.SolrCore;
031: import org.apache.solr.request.SolrRequestHandler;
032: import org.apache.solr.request.SolrQueryResponse;
033: import org.apache.solr.request.SolrQueryRequest;
034:
035: /**
036: * @author yonik
037: * @version $Id: OldRequestHandler.java 472574 2006-11-08 18:25:52Z yonik $
038: */
039:
040: public class OldRequestHandler implements SolrRequestHandler {
041:
042: long numRequests;
043: long numErrors;
044:
045: public void init(NamedList args) {
046: SolrCore.log.log(Level.INFO,
047: "Unused request handler arguments:" + args);
048: }
049:
050: public void handleRequest(SolrQueryRequest req,
051: SolrQueryResponse rsp) {
052: numRequests++;
053:
054: Query query = null;
055: Filter filter = null;
056:
057: List<String> commands = StrUtils.splitSmart(req
058: .getQueryString(), ';');
059:
060: String qs = commands.size() >= 1 ? commands.get(0) : "";
061: query = QueryParsing.parseQuery(qs, req.getSchema());
062:
063: // If the first non-query, non-filter command is a simple sort on an indexed field, then
064: // we can use the Lucene sort ability.
065: Sort sort = null;
066: if (commands.size() >= 2) {
067: QueryParsing.SortSpec sortSpec = QueryParsing.parseSort(
068: commands.get(1), req.getSchema());
069: if (sortSpec != null) {
070: sort = sortSpec.getSort();
071: // ignore the count for now... it's currently only controlled by start & limit on req
072: // count = sortSpec.getCount();
073: }
074: }
075:
076: Hits hits = null;
077:
078: try {
079: hits = req.getSearcher().search(query, filter, sort);
080:
081: int numHits = hits.length();
082: int startRow = Math.min(numHits, req.getStart());
083: int endRow = Math.min(numHits, req.getStart()
084: + req.getLimit());
085: int numRows = endRow - startRow;
086:
087: int[] ids = new int[numRows];
088: Document[] data = new Document[numRows];
089: for (int i = startRow; i < endRow; i++) {
090: ids[i] = hits.id(i);
091: data[i] = hits.doc(i);
092: }
093:
094: rsp.add(null, new DocSlice(0, numRows, ids, null, numHits,
095: 0.0f));
096:
097: /***********************
098: rsp.setResults(new DocSlice(0,numRows,ids,null,numHits));
099:
100: // Setting the actual document objects is optional
101: rsp.setResults(data);
102: ************************/
103: } catch (IOException e) {
104: rsp.setException(e);
105: numErrors++;
106: return;
107: }
108:
109: }
110:
111: public String getName() {
112: return OldRequestHandler.class.getName();
113: }
114:
115: public String getVersion() {
116: return SolrCore.version;
117: }
118:
119: public String getDescription() {
120: return "The original Hits based request handler";
121: }
122:
123: public Category getCategory() {
124: return Category.QUERYHANDLER;
125: }
126:
127: public String getSourceId() {
128: return "$Id: OldRequestHandler.java 472574 2006-11-08 18:25:52Z yonik $";
129: }
130:
131: public String getSource() {
132: return "$URL: https://svn.apache.org/repos/asf/lucene/solr/branches/branch-1.2/src/java/org/apache/solr/tst/OldRequestHandler.java $";
133: }
134:
135: public URL[] getDocs() {
136: return null;
137: }
138:
139: public NamedList getStatistics() {
140: NamedList lst = new NamedList();
141: lst.add("requests", numRequests);
142: lst.add("errors", numErrors);
143: return lst;
144: }
145:
146: }
|