You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by ry...@apache.org on 2011/03/25 17:24:22 UTC
svn commit: r1085450 [2/2] - in /lucene/dev/trunk/solr: ./
src/common/org/apache/solr/common/ src/common/org/apache/solr/common/util/
src/java/org/apache/solr/handler/ src/java/org/apache/solr/handler/component/
src/java/org/apache/solr/response/ src/j...
Added: lucene/dev/trunk/solr/src/java/org/apache/solr/response/transform/ValueAugmenter.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/src/java/org/apache/solr/response/transform/ValueAugmenter.java?rev=1085450&view=auto
==============================================================================
--- lucene/dev/trunk/solr/src/java/org/apache/solr/response/transform/ValueAugmenter.java (added)
+++ lucene/dev/trunk/solr/src/java/org/apache/solr/response/transform/ValueAugmenter.java Fri Mar 25 16:24:21 2011
@@ -0,0 +1,40 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.solr.response.transform;
+
+import org.apache.solr.common.SolrDocument;
+
+/**
+ * @version $Id: JSONResponseWriter.java 1065304 2011-01-30 15:10:15Z rmuir $
+ * @since solr 4.0
+ */
+public class ValueAugmenter extends DocTransformer
+{
+ final String name;
+ final Object value;
+
+ public ValueAugmenter( String name, Object value )
+ {
+ this.name = name;
+ this.value = value;
+ }
+
+ @Override
+ public void transform(SolrDocument doc, int docid) {
+ doc.setField( name, value );
+ }
+}
Modified: lucene/dev/trunk/solr/src/java/org/apache/solr/util/SolrPluginUtils.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/src/java/org/apache/solr/util/SolrPluginUtils.java?rev=1085450&r1=1085449&r2=1085450&view=diff
==============================================================================
--- lucene/dev/trunk/solr/src/java/org/apache/solr/util/SolrPluginUtils.java (original)
+++ lucene/dev/trunk/solr/src/java/org/apache/solr/util/SolrPluginUtils.java Fri Mar 25 16:24:21 2011
@@ -37,6 +37,7 @@ import org.apache.solr.handler.component
import org.apache.solr.handler.component.ResponseBuilder;
import org.apache.solr.highlight.SolrHighlighter;
import org.apache.solr.request.SolrQueryRequest;
+import org.apache.solr.response.ReturnFields;
import org.apache.solr.response.SolrQueryResponse;
import org.apache.solr.schema.IndexSchema;
import org.apache.solr.schema.SchemaField;
@@ -115,41 +116,6 @@ public class SolrPluginUtils {
return splitList.split(value.trim(), 0);
}
- /**
- * Assumes the standard query param of "fl" to specify the return fields
- * @see #setReturnFields(String,SolrQueryResponse)
- */
- public static int setReturnFields(SolrQueryRequest req,
- SolrQueryResponse res) {
-
- return setReturnFields(req.getParams().get(CommonParams.FL), res);
- }
-
- /**
- * Given a space seperated list of field names, sets the field list on the
- * SolrQueryResponse.
- *
- * @return bitfield of SolrIndexSearcher flags that need to be set
- */
- public static int setReturnFields(String fl,
- SolrQueryResponse res) {
- int flags = 0;
- if (fl != null) {
- // TODO - this could become more efficient if widely used.
- // TODO - should field order be maintained?
- String[] flst = split(fl);
- if (flst.length > 0 && !(flst.length==1 && flst[0].length()==0)) {
- Set<String> set = new LinkedHashSet<String>();
- for (String fname : flst) {
- if("score".equalsIgnoreCase(fname))
- flags |= SolrIndexSearcher.GET_SCORES;
- set.add(fname);
- }
- res.setReturnFields(set);
- }
- }
- return flags;
- }
/**
* Pre-fetch documents into the index searcher's document cache.
@@ -180,14 +146,13 @@ public class SolrPluginUtils {
return;
}
- Set<String> returnFields = res.getReturnFields();
- Set<String> fieldFilter = returnFields;
-
- if(returnFields != null) {
+ ReturnFields returnFields = res.getReturnFields();
+ if(returnFields.getFieldNames() != null) {
+ Set<String> fieldFilter = returnFields.getFieldNames();
if (rb.doHighlights) {
// copy return fields list
- fieldFilter = new HashSet<String>(returnFields);
+ fieldFilter = new HashSet<String>(fieldFilter);
// add highlight fields
SolrHighlighter highlighter = HighlightComponent.getHighlighter(req.getCore());
Modified: lucene/dev/trunk/solr/src/test/org/apache/solr/BasicFunctionalityTest.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/src/test/org/apache/solr/BasicFunctionalityTest.java?rev=1085450&r1=1085449&r2=1085450&view=diff
==============================================================================
--- lucene/dev/trunk/solr/src/test/org/apache/solr/BasicFunctionalityTest.java (original)
+++ lucene/dev/trunk/solr/src/test/org/apache/solr/BasicFunctionalityTest.java Fri Mar 25 16:24:21 2011
@@ -42,6 +42,7 @@ import org.apache.solr.handler.RequestHa
import org.apache.solr.request.LocalSolrQueryRequest;
import org.apache.solr.request.SolrQueryRequest;
import org.apache.solr.request.SolrRequestHandler;
+import org.apache.solr.response.ResultContext;
import org.apache.solr.response.SolrQueryResponse;
import org.apache.solr.response.XMLWriter;
import org.apache.solr.schema.IndexSchema;
@@ -558,7 +559,7 @@ public class BasicFunctionalityTest exte
SolrQueryResponse rsp = new SolrQueryResponse();
core.execute(core.getRequestHandler(req.getParams().get(CommonParams.QT)), req, rsp);
- DocList dl = (DocList) rsp.getValues().get("response");
+ DocList dl = ((ResultContext) rsp.getValues().get("response")).docs;
org.apache.lucene.document.Document d = req.getSearcher().doc(dl.iterator().nextDoc());
// ensure field is not lazy
assertTrue( d.getFieldable("test_hlt") instanceof Field );
@@ -580,7 +581,7 @@ public class BasicFunctionalityTest exte
SolrQueryResponse rsp = new SolrQueryResponse();
core.execute(core.getRequestHandler(req.getParams().get(CommonParams.QT)), req, rsp);
- DocList dl = (DocList) rsp.getValues().get("response");
+ DocList dl = ((ResultContext) rsp.getValues().get("response")).docs;
DocIterator di = dl.iterator();
org.apache.lucene.document.Document d = req.getSearcher().doc(di.nextDoc());
// ensure field is lazy
Modified: lucene/dev/trunk/solr/src/test/org/apache/solr/client/solrj/SolrExampleTests.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/src/test/org/apache/solr/client/solrj/SolrExampleTests.java?rev=1085450&r1=1085449&r2=1085450&view=diff
==============================================================================
--- lucene/dev/trunk/solr/src/test/org/apache/solr/client/solrj/SolrExampleTests.java (original)
+++ lucene/dev/trunk/solr/src/test/org/apache/solr/client/solrj/SolrExampleTests.java Fri Mar 25 16:24:21 2011
@@ -46,9 +46,11 @@ import org.apache.solr.client.solrj.resp
import org.apache.solr.client.solrj.response.UpdateResponse;
import org.apache.solr.client.solrj.util.ClientUtils;
import org.apache.solr.common.SolrDocument;
+import org.apache.solr.common.SolrDocumentList;
import org.apache.solr.common.SolrInputDocument;
import org.apache.solr.common.util.XML;
import org.apache.solr.common.util.NamedList;
+import org.apache.solr.common.params.CommonParams;
import org.apache.solr.common.params.FacetParams;
import org.junit.Test;
@@ -218,6 +220,39 @@ abstract public class SolrExampleTests e
assertEquals( 1, rsp.getResults().getNumFound() );
}
+
+
+ /**
+ * Get empty results
+ */
+ @Test
+ public void testGetEmptyResults() throws Exception
+ {
+ SolrServer server = getSolrServer();
+
+ // Empty the database...
+ server.deleteByQuery( "*:*" );// delete everything!
+ server.commit();
+
+ // Add two docs
+ SolrInputDocument doc = new SolrInputDocument();
+ doc.addField( "id", "id1", 1.0f );
+ doc.addField( "name", "doc1", 1.0f );
+ doc.addField( "price", 10 );
+ server.add( doc );
+
+ doc = new SolrInputDocument();
+ doc.addField( "id", "id2", 1.0f );
+ server.add( doc );
+ server.commit();
+
+ // Make sure we get empty docs for unknown field
+ SolrDocumentList out = server.query( new SolrQuery( "*:*" ).set("fl", "foofoofoo" ) ).getResults();
+ assertEquals( 2, out.getNumFound() );
+ assertEquals( 0, out.get(0).size() );
+ assertEquals( 0, out.get(1).size() );
+
+ }
private String randomTestString(int maxLength) {
// we can't just use _TestUtil.randomUnicodeString() or we might get 0xfffe etc
@@ -345,6 +380,55 @@ abstract public class SolrExampleTests e
}
+ @Test
+ public void testAugmentFields() throws Exception
+ {
+ SolrServer server = getSolrServer();
+
+ // Empty the database...
+ server.deleteByQuery( "*:*" );// delete everything!
+
+ // Now add something...
+ SolrInputDocument doc = new SolrInputDocument();
+ doc.addField( "id", "111", 1.0f );
+ doc.addField( "name", "doc1", 1.0f );
+ doc.addField( "price", 11 );
+ server.add( doc );
+
+ doc = new SolrInputDocument();
+ doc.addField( "id", "222", 1.0f );
+ doc.addField( "name", "doc2", 1.0f );
+ doc.addField( "price", 22 );
+ server.add( doc );
+
+ // Add the documents
+ server.commit();
+
+ SolrQuery query = new SolrQuery();
+ query.setQuery( "*:*" );
+ query.set( CommonParams.FL, "id,price,_docid_,_explain_,score" );
+ query.addSortField( "price", SolrQuery.ORDER.asc );
+ QueryResponse rsp = server.query( query );
+
+ SolrDocumentList out = rsp.getResults();
+ assertEquals( 2, out.getNumFound() );
+ SolrDocument out1 = out.get( 0 );
+ SolrDocument out2 = out.get( 1 );
+ assertEquals( "111", out1.getFieldValue( "id" ) );
+ assertEquals( "222", out2.getFieldValue( "id" ) );
+ assertEquals( 1.0f, out1.getFieldValue( "score" ) );
+ assertEquals( 1.0f, out2.getFieldValue( "score" ) );
+
+ // check that the docid is one bigger
+ int id1 = (Integer)out1.getFieldValue( "_docid_" );
+ int id2 = (Integer)out2.getFieldValue( "_docid_" );
+ assertEquals( "should be one bigger ["+id1+","+id2+"]", id1, id2-1 );
+
+ // The score from explain should be the same as the score
+ NamedList explain = (NamedList)out1.getFieldValue( "_explain_" );
+ assertEquals( out1.get( "score"), explain.get( "value" ) );
+ }
+
@Test
public void testContentStreamRequest() throws Exception {
SolrServer server = getSolrServer();
@@ -804,6 +888,7 @@ abstract public class SolrExampleTests e
// Make sure it ran OK
SolrQuery query = new SolrQuery("*:*");
+ query.set( CommonParams.FL, "id,score,_docid_" );
QueryResponse response = server.query(query);
assertEquals(0, response.getStatus());
assertEquals(10, response.getResults().getNumFound());
@@ -820,6 +905,11 @@ abstract public class SolrExampleTests e
@Override
public void streamSolrDocument(SolrDocument doc) {
cnt.incrementAndGet();
+
+ // Make sure the transformer works for streaming
+ Float score = (Float)doc.get( "score" );
+ Integer docid = (Integer)doc.get( "_docid_" );
+ assertEquals( "should have score", new Float(1.0), score );
}
});
Modified: lucene/dev/trunk/solr/src/test/org/apache/solr/response/TestCSVResponseWriter.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/src/test/org/apache/solr/response/TestCSVResponseWriter.java?rev=1085450&r1=1085449&r2=1085450&view=diff
==============================================================================
--- lucene/dev/trunk/solr/src/test/org/apache/solr/response/TestCSVResponseWriter.java (original)
+++ lucene/dev/trunk/solr/src/test/org/apache/solr/response/TestCSVResponseWriter.java Fri Mar 25 16:24:21 2011
@@ -22,7 +22,6 @@ import org.apache.solr.common.SolrDocume
import org.apache.solr.common.SolrDocumentList;
import org.apache.solr.common.util.DateUtil;
import org.apache.solr.request.SolrQueryRequest;
-import org.apache.solr.util.SolrPluginUtils;
import org.junit.*;
import java.io.StringWriter;
@@ -129,19 +128,19 @@ public class TestCSVResponseWriter exten
rsp.add("response", sdl);
QueryResponseWriter w = new CSVResponseWriter();
- SolrPluginUtils.setReturnFields("id,foo_s", rsp);
+ rsp.setReturnFields( ReturnFields.getReturnFields("id,foo_s", req) );
StringWriter buf = new StringWriter();
w.write(buf, req, rsp);
assertEquals("id,foo_s\n1,hi\n2,\n", buf.toString());
// try scores
- SolrPluginUtils.setReturnFields("id,score,foo_s", rsp);
+ rsp.setReturnFields( ReturnFields.getReturnFields("id,score,foo_s", req) );
buf = new StringWriter();
w.write(buf, req, rsp);
assertEquals("id,score,foo_s\n1,2.718,hi\n2,89.83,\n", buf.toString());
// get field values from docs... should be ordered and not include score unless requested
- SolrPluginUtils.setReturnFields("*", rsp);
+ rsp.setReturnFields( ReturnFields.getReturnFields("*", req) );
buf = new StringWriter();
w.write(buf, req, rsp);
assertEquals("id,foo_i,foo_s,foo_l,foo_b,foo_f,foo_d,foo_dt,v_ss,v2_ss\n" +
@@ -151,7 +150,7 @@ public class TestCSVResponseWriter exten
// get field values and scores - just check that the scores are there... we don't guarantee where
- SolrPluginUtils.setReturnFields("*,score", rsp);
+ rsp.setReturnFields( ReturnFields.getReturnFields("*,score", req) );
buf = new StringWriter();
w.write(buf, req, rsp);
String s = buf.toString();
Modified: lucene/dev/trunk/solr/src/test/org/apache/solr/search/TestRangeQuery.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/src/test/org/apache/solr/search/TestRangeQuery.java?rev=1085450&r1=1085449&r2=1085450&view=diff
==============================================================================
--- lucene/dev/trunk/solr/src/test/org/apache/solr/search/TestRangeQuery.java (original)
+++ lucene/dev/trunk/solr/src/test/org/apache/solr/search/TestRangeQuery.java Fri Mar 25 16:24:21 2011
@@ -19,6 +19,7 @@ package org.apache.solr.search;
import org.apache.solr.SolrTestCaseJ4;
import org.apache.solr.common.SolrInputDocument;
import org.apache.solr.request.SolrQueryRequest;
+import org.apache.solr.response.ResultContext;
import org.apache.solr.response.SolrQueryResponse;
import org.junit.Before;
import org.junit.BeforeClass;
@@ -263,7 +264,9 @@ public class TestRangeQuery extends Solr
SolrQueryResponse qr = h.queryAndResponse(handler, req);
if (last != null) {
// we only test if the same docs matched since some queries will include factors like idf, etc.
- sameDocs((DocSet)qr.getValues().get("response"), (DocSet)last.getValues().get("response"));
+ DocList rA = ((ResultContext)qr.getValues().get("response")).docs;
+ DocList rB = ((ResultContext)last.getValues().get("response")).docs;
+ sameDocs( rA, rB );
}
req.close();
last = qr;
Modified: lucene/dev/trunk/solr/src/webapp/src/org/apache/solr/client/solrj/embedded/EmbeddedSolrServer.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/src/webapp/src/org/apache/solr/client/solrj/embedded/EmbeddedSolrServer.java?rev=1085450&r1=1085449&r2=1085450&view=diff
==============================================================================
--- lucene/dev/trunk/solr/src/webapp/src/org/apache/solr/client/solrj/embedded/EmbeddedSolrServer.java (original)
+++ lucene/dev/trunk/solr/src/webapp/src/org/apache/solr/client/solrj/embedded/EmbeddedSolrServer.java Fri Mar 25 16:24:21 2011
@@ -43,7 +43,9 @@ import org.apache.solr.request.SolrQuery
import org.apache.solr.request.SolrRequestHandler;
import org.apache.solr.request.SolrRequestInfo;
import org.apache.solr.response.BinaryResponseWriter;
+import org.apache.solr.response.ResultContext;
import org.apache.solr.response.SolrQueryResponse;
+import org.apache.solr.response.transform.DocTransformer;
import org.apache.solr.search.DocIterator;
import org.apache.solr.search.DocList;
import org.apache.solr.servlet.SolrRequestParsers;
@@ -164,28 +166,16 @@ public class EmbeddedSolrServer extends
new BinaryResponseWriter.Resolver( req, rsp.getReturnFields())
{
@Override
- public void writeDocList(DocList ids, JavaBinCodec codec) throws IOException {
+ public void writeResults(ResultContext ctx, JavaBinCodec codec) throws IOException {
// write an empty list...
SolrDocumentList docs = new SolrDocumentList();
- docs.setNumFound( ids.matches() );
- docs.setStart( ids.offset() );
- docs.setMaxScore( ids.maxScore() );
+ docs.setNumFound( ctx.docs.matches() );
+ docs.setStart( ctx.docs.offset() );
+ docs.setMaxScore( ctx.docs.maxScore() );
codec.writeSolrDocumentList( docs );
- int sz = ids.size();
-
- if(searcher == null) searcher = solrQueryRequest.getSearcher();
- if(schema == null) schema = solrQueryRequest.getSchema();
- DocIterator iterator = ids.iterator();
- for (int i = 0; i < sz; i++) {
- int id = iterator.nextDoc();
- Document doc = searcher.doc(id, returnFields);
- SolrDocument sdoc = getDoc(doc);
- if (includeScore && ids.hasScores()) {
- sdoc.addField("score", iterator.score());
- }
- callback.streamSolrDocument( sdoc );
- }
+ // This will transform
+ writeResultsBody( ctx, codec );
}
};
@@ -194,7 +184,7 @@ public class EmbeddedSolrServer extends
new JavaBinCodec(resolver) {
@Override
- public void writeSolrDocument(SolrDocument doc, Set<String> fields) throws IOException {
+ public void writeSolrDocument(SolrDocument doc) throws IOException {
callback.streamSolrDocument( doc );
//super.writeSolrDocument( doc, fields );
}