You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by si...@apache.org on 2011/03/28 12:50:48 UTC
svn commit: r1086181 [20/20] - in /lucene/dev/branches/docvalues: ./
dev-tools/eclipse/ dev-tools/idea/ dev-tools/idea/.idea/
dev-tools/idea/.idea/libraries/ dev-tools/idea/lucene/ dev-tools/idea/solr/
dev-tools/idea/solr/contrib/analysis-extras/ dev-t...
Modified: lucene/dev/branches/docvalues/solr/src/test/org/apache/solr/client/solrj/SolrExampleTests.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/docvalues/solr/src/test/org/apache/solr/client/solrj/SolrExampleTests.java?rev=1086181&r1=1086180&r2=1086181&view=diff
==============================================================================
--- lucene/dev/branches/docvalues/solr/src/test/org/apache/solr/client/solrj/SolrExampleTests.java (original)
+++ lucene/dev/branches/docvalues/solr/src/test/org/apache/solr/client/solrj/SolrExampleTests.java Mon Mar 28 10:50:28 2011
@@ -27,6 +27,10 @@ import java.util.List;
import java.util.concurrent.atomic.AtomicInteger;
import junit.framework.Assert;
+import org.apache.lucene.util._TestUtil;
+import org.apache.solr.client.solrj.impl.BinaryResponseParser;
+import org.apache.solr.client.solrj.impl.CommonsHttpSolrServer;
+import org.apache.solr.client.solrj.impl.XMLResponseParser;
import org.apache.solr.client.solrj.request.DirectXmlRequest;
import org.apache.solr.client.solrj.request.LukeRequest;
import org.apache.solr.client.solrj.request.SolrPing;
@@ -42,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;
@@ -181,7 +187,7 @@ abstract public class SolrExampleTests e
SolrInputDocument doc2 = new SolrInputDocument();
doc2.addField( "id", "id2", 1.0f );
- doc2.addField( "name", "h\u1234llo", 1.0f );
+ doc2.addField( "name", "h\uD866\uDF05llo", 1.0f );
doc2.addField( "price", 20 );
Collection<SolrInputDocument> docs = new ArrayList<SolrInputDocument>();
@@ -209,12 +215,129 @@ abstract public class SolrExampleTests e
// System.out.println( rsp.getResults() );
// query outside ascii range
- query.setQuery("name:h\u1234llo");
+ query.setQuery("name:h\uD866\uDF05llo");
rsp = server.query( query );
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
+ // (considered invalid by XML)
+
+ int size = random.nextInt(maxLength);
+ StringBuilder sb = new StringBuilder();
+ for (int i = 0; i < size; i++) {
+ switch(random.nextInt(4)) {
+ case 0: /* single byte */
+ sb.append('a');
+ break;
+ case 1: /* two bytes */
+ sb.append('\u0645');
+ break;
+ case 2: /* three bytes */
+ sb.append('\u092a');
+ break;
+ case 3: /* four bytes */
+ sb.appendCodePoint(0x29B05);
+ }
+ }
+ return sb.toString();
+ }
+ public void testUnicode() throws Exception {
+ int numIterations = 100 * RANDOM_MULTIPLIER;
+
+ SolrServer server = getSolrServer();
+
+ // save the old parser, so we can set it back.
+ ResponseParser oldParser = null;
+ if (server instanceof CommonsHttpSolrServer) {
+ CommonsHttpSolrServer cserver = (CommonsHttpSolrServer) server;
+ oldParser = cserver.getParser();
+ }
+
+ try {
+ for (int iteration = 0; iteration < numIterations; iteration++) {
+ // choose format
+ if (server instanceof CommonsHttpSolrServer) {
+ if (random.nextBoolean()) {
+ ((CommonsHttpSolrServer) server).setParser(new BinaryResponseParser());
+ } else {
+ ((CommonsHttpSolrServer) server).setParser(new XMLResponseParser());
+ }
+ }
+
+ int numDocs = _TestUtil.nextInt(random, 1, 100);
+
+ // Empty the database...
+ server.deleteByQuery("*:*");// delete everything!
+
+ List<SolrInputDocument> docs = new ArrayList<SolrInputDocument>();
+ for (int i = 0; i < numDocs; i++) {
+ // Now add something...
+ SolrInputDocument doc = new SolrInputDocument();
+ doc.addField("id", "" + i);
+ doc.addField("unicode_s", randomTestString(30));
+ docs.add(doc);
+ }
+
+ server.add(docs);
+ server.commit();
+
+ SolrQuery query = new SolrQuery();
+ query.setQuery("*:*");
+ query.setRows(numDocs);
+
+ QueryResponse rsp = server.query( query );
+
+ for (int i = 0; i < numDocs; i++) {
+ String expected = (String) docs.get(i).getFieldValue("unicode_s");
+ String actual = (String) rsp.getResults().get(i).getFieldValue("unicode_s");
+ assertEquals(expected, actual);
+ }
+ }
+ } finally {
+ if (oldParser != null) {
+ // set the old parser back
+ ((CommonsHttpSolrServer)server).setParser(oldParser);
+ }
+ }
+ }
+
/**
* query the example
*/
@@ -257,6 +380,58 @@ 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 );
+ server.commit(); // make sure this gets in first
+
+ doc = new SolrInputDocument();
+ doc.addField( "id", "222", 1.0f );
+ doc.addField( "name", "doc2", 1.0f );
+ doc.addField( "price", 22 );
+ server.add( doc );
+ server.commit();
+
+ SolrQuery query = new SolrQuery();
+ query.setQuery( "*:*" );
+ query.set( CommonParams.FL, "id,price,_docid_,_explain:nl_,score,aaa=_value:aaa_,ten=_value:int:10_" );
+ 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_" );
+ assertTrue( "should be bigger ["+id1+","+id2+"]", id2 > id1 );
+
+ // The score from explain should be the same as the score
+ NamedList explain = (NamedList)out1.getFieldValue( "_explain:nl_" );
+ assertEquals( out1.get( "score"), explain.get( "value" ) );
+
+ // Augmented _value_ with alias
+ assertEquals( "aaa", out1.get( "aaa" ) );
+ assertEquals( 10, ((Integer)out1.get( "ten" )).intValue() );
+ }
+
@Test
public void testContentStreamRequest() throws Exception {
SolrServer server = getSolrServer();
@@ -471,8 +646,8 @@ abstract public class SolrExampleTests e
assertEquals( "they have the same distribution", inStockF.getStddev(), inStockT.getStddev() );
}
- @Test
- public void testPingHandler() throws Exception
+ @Test
+ public void testPingHandler() throws Exception
{
SolrServer server = getSolrServer();
@@ -495,8 +670,8 @@ abstract public class SolrExampleTests e
}
}
- @Test
- public void testFaceting() throws Exception
+ @Test
+ public void testFaceting() throws Exception
{
SolrServer server = getSolrServer();
@@ -716,6 +891,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());
@@ -732,6 +908,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/branches/docvalues/solr/src/test/org/apache/solr/cloud/BasicZkTest.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/docvalues/solr/src/test/org/apache/solr/cloud/BasicZkTest.java?rev=1086181&r1=1086180&r2=1086181&view=diff
==============================================================================
--- lucene/dev/branches/docvalues/solr/src/test/org/apache/solr/cloud/BasicZkTest.java (original)
+++ lucene/dev/branches/docvalues/solr/src/test/org/apache/solr/cloud/BasicZkTest.java Mon Mar 28 10:50:28 2011
@@ -18,6 +18,7 @@ package org.apache.solr.cloud;
*/
import org.apache.lucene.index.LogMergePolicy;
+import org.apache.solr.common.params.CommonParams;
import org.apache.solr.core.SolrCore;
import org.apache.solr.update.SolrIndexWriter;
@@ -50,7 +51,7 @@ public class BasicZkTest extends Abstrac
assertEquals("Mergefactor was not picked up", ((LogMergePolicy)writer.getConfig().getMergePolicy()).getMergeFactor(), 8);
writer.close();
- lrf.args.put("version", "2.0");
+ lrf.args.put(CommonParams.VERSION, "2.2");
assertQ("test query on empty index", req("qlkciyopsbgzyvkylsjhchghjrdf"),
"//result[@numFound='0']");
Modified: lucene/dev/branches/docvalues/solr/src/test/org/apache/solr/cloud/ZkSolrClientTest.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/docvalues/solr/src/test/org/apache/solr/cloud/ZkSolrClientTest.java?rev=1086181&r1=1086180&r2=1086181&view=diff
==============================================================================
--- lucene/dev/branches/docvalues/solr/src/test/org/apache/solr/cloud/ZkSolrClientTest.java (original)
+++ lucene/dev/branches/docvalues/solr/src/test/org/apache/solr/cloud/ZkSolrClientTest.java Mon Mar 28 10:50:28 2011
@@ -40,7 +40,7 @@ public class ZkSolrClientTest extends Ab
server = new ZkTestServer(zkDir);
server.run();
- SolrZkClient zkClient = new SolrZkClient(server.getZkAddress(), 100);
+ SolrZkClient zkClient = new SolrZkClient(server.getZkAddress(), AbstractZkTestCase.TIMEOUT);
zkClient.close();
server.shutdown();
Modified: lucene/dev/branches/docvalues/solr/src/test/org/apache/solr/core/TestArbitraryIndexDir.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/docvalues/solr/src/test/org/apache/solr/core/TestArbitraryIndexDir.java?rev=1086181&r1=1086180&r2=1086181&view=diff
==============================================================================
--- lucene/dev/branches/docvalues/solr/src/test/org/apache/solr/core/TestArbitraryIndexDir.java (original)
+++ lucene/dev/branches/docvalues/solr/src/test/org/apache/solr/core/TestArbitraryIndexDir.java Mon Mar 28 10:50:28 2011
@@ -32,6 +32,7 @@ import org.apache.lucene.queryParser.Par
import org.apache.lucene.store.Directory;
import org.apache.lucene.util.Version;
import org.apache.solr.common.SolrException;
+import org.apache.solr.common.params.CommonParams;
import org.apache.solr.util.AbstractSolrTestCase;
import org.apache.solr.util.TestHarness;
import org.junit.Test;
@@ -56,7 +57,7 @@ public class TestArbitraryIndexDir exten
solrConfig,
"schema12.xml");
lrf = h.getRequestFactory
- ("standard",0,20,"version","2.2");
+ ("standard",0,20,CommonParams.VERSION,"2.2");
}
@Override
Modified: lucene/dev/branches/docvalues/solr/src/test/org/apache/solr/core/TestXIncludeConfig.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/docvalues/solr/src/test/org/apache/solr/core/TestXIncludeConfig.java?rev=1086181&r1=1086180&r2=1086181&view=diff
==============================================================================
--- lucene/dev/branches/docvalues/solr/src/test/org/apache/solr/core/TestXIncludeConfig.java (original)
+++ lucene/dev/branches/docvalues/solr/src/test/org/apache/solr/core/TestXIncludeConfig.java Mon Mar 28 10:50:28 2011
@@ -17,11 +17,8 @@ package org.apache.solr.core;
* limitations under the License.
*/
-import java.io.File;
-
-import org.apache.commons.io.FileUtils;
-import org.apache.solr.util.AbstractSolrTestCase;
import org.apache.solr.request.SolrRequestHandler;
+import org.apache.solr.util.AbstractSolrTestCase;
import javax.xml.parsers.DocumentBuilderFactory;
@@ -46,19 +43,16 @@ public class TestXIncludeConfig extends
@Override
public void setUp() throws Exception {
- File dest = new File("solrconfig-reqHandler.incl");
- dest.deleteOnExit();
- FileUtils.copyFile(getFile("solr/conf/solrconfig-reqHandler.incl"), dest);
supports = true;
javax.xml.parsers.DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
try {
//see whether it even makes sense to run this test
dbf.setXIncludeAware(true);
dbf.setNamespaceAware(true);
- super.setUp();
} catch (UnsupportedOperationException e) {
supports = false;
}
+ super.setUp();
}
public void testXInclude() throws Exception {
Modified: lucene/dev/branches/docvalues/solr/src/test/org/apache/solr/handler/TestCSVLoader.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/docvalues/solr/src/test/org/apache/solr/handler/TestCSVLoader.java?rev=1086181&r1=1086180&r2=1086181&view=diff
==============================================================================
--- lucene/dev/branches/docvalues/solr/src/test/org/apache/solr/handler/TestCSVLoader.java (original)
+++ lucene/dev/branches/docvalues/solr/src/test/org/apache/solr/handler/TestCSVLoader.java Mon Mar 28 10:50:28 2011
@@ -19,6 +19,7 @@ package org.apache.solr.handler;
import org.apache.solr.SolrTestCaseJ4;
import org.apache.solr.request.LocalSolrQueryRequest;
+import org.apache.solr.common.params.CommonParams;
import org.apache.solr.common.util.ContentStream;
import org.apache.solr.common.util.ContentStreamBase;
import org.junit.After;
@@ -121,12 +122,12 @@ public class TestCSVLoader extends SolrT
@Test
public void testCSV() throws Exception {
- lrf.args.put("version","2.0");
+ lrf.args.put(CommonParams.VERSION,"2.2");
makeFile("id,str_s\n100,\"quoted\"\n101,\n102,\"\"\n103,");
loadLocal("stream.file",filename,"commit","true");
assertQ(req("id:[100 TO 110]"),"//*[@numFound='4']");
- assertQ(req("id:100"),"//str[@name='str_s'][.='quoted']");
+ assertQ(req("id:100"),"//arr[@name='str_s']/str[.='quoted']");
assertQ(req("id:101"),"count(//str[@name='str_s'])=0");
// 102 is a quoted zero length field ,"", as opposed to ,,
// but we can't distinguish this case (and it's debateable
@@ -154,7 +155,7 @@ public class TestCSVLoader extends SolrT
// test global value mapping
loadLocal("stream.file",filename, "commit","true", "map","quoted:QUOTED");
assertQ(req("id:[100 TO 110]"),"//*[@numFound='4']");
- assertQ(req("id:100"),"//str[@name='str_s'][.='QUOTED']");
+ assertQ(req("id:100"),"//arr[@name='str_s']/str[.='QUOTED']");
assertQ(req("id:101"),"count(//str[@name='str_s'])=0");
assertQ(req("id:102"),"count(//str[@name='str_s'])=0");
assertQ(req("id:103"),"count(//str[@name='str_s'])=0");
@@ -167,39 +168,39 @@ public class TestCSVLoader extends SolrT
// test value mapping from empty
loadLocal("stream.file",filename, "commit","true", "map",":EMPTY");
assertQ(req("id:[100 TO 110]"),"//*[@numFound='4']");
- assertQ(req("id:100"),"//str[@name='str_s'][.='quoted']");
- assertQ(req("id:101"),"//str[@name='str_s'][.='EMPTY']");
- assertQ(req("id:102"),"//str[@name='str_s'][.='EMPTY']");
- assertQ(req("id:103"),"//str[@name='str_s'][.='EMPTY']");
+ assertQ(req("id:100"),"//arr[@name='str_s']/str[.='quoted']");
+ assertQ(req("id:101"),"//arr[@name='str_s']/str[.='EMPTY']");
+ assertQ(req("id:102"),"//arr[@name='str_s']/str[.='EMPTY']");
+ assertQ(req("id:103"),"//arr[@name='str_s']/str[.='EMPTY']");
// test multiple map rules
loadLocal("stream.file",filename, "commit","true", "map",":EMPTY", "map","quoted:QUOTED");
assertQ(req("id:[100 TO 110]"),"//*[@numFound='4']");
- assertQ(req("id:100"),"//str[@name='str_s'][.='QUOTED']");
- assertQ(req("id:101"),"//str[@name='str_s'][.='EMPTY']");
- assertQ(req("id:102"),"//str[@name='str_s'][.='EMPTY']");
- assertQ(req("id:103"),"//str[@name='str_s'][.='EMPTY']");
+ assertQ(req("id:100"),"//arr[@name='str_s']/str[.='QUOTED']");
+ assertQ(req("id:101"),"//arr[@name='str_s']/str[.='EMPTY']");
+ assertQ(req("id:102"),"//arr[@name='str_s']/str[.='EMPTY']");
+ assertQ(req("id:103"),"//arr[@name='str_s']/str[.='EMPTY']");
// test indexing empty fields
loadLocal("stream.file",filename, "commit","true", "f.str_s.keepEmpty","true");
assertQ(req("id:[100 TO 110]"),"//*[@numFound='4']");
- assertQ(req("id:100"),"//str[@name='str_s'][.='quoted']");
- assertQ(req("id:101"),"//str[@name='str_s'][.='']");
- assertQ(req("id:102"),"//str[@name='str_s'][.='']");
- assertQ(req("id:103"),"//str[@name='str_s'][.='']");
+ assertQ(req("id:100"),"//arr[@name='str_s']/str[.='quoted']");
+ assertQ(req("id:101"),"//arr[@name='str_s']/str[.='']");
+ assertQ(req("id:102"),"//arr[@name='str_s']/str[.='']");
+ assertQ(req("id:103"),"//arr[@name='str_s']/str[.='']");
// test overriding the name of fields
loadLocal("stream.file",filename, "commit","true",
"fieldnames","id,my_s", "header","true",
"f.my_s.map",":EMPTY");
assertQ(req("id:[100 TO 110]"),"//*[@numFound='4']");
- assertQ(req("id:100"),"//str[@name='my_s'][.='quoted']");
- assertQ(req("id:101"),"count(//str[@name='str_s'])=0");
- assertQ(req("id:102"),"count(//str[@name='str_s'])=0");
- assertQ(req("id:103"),"count(//str[@name='str_s'])=0");
- assertQ(req("id:101"),"//str[@name='my_s'][.='EMPTY']");
- assertQ(req("id:102"),"//str[@name='my_s'][.='EMPTY']");
- assertQ(req("id:103"),"//str[@name='my_s'][.='EMPTY']");
+ assertQ(req("id:100"),"//arr[@name='my_s']/str[.='quoted']");
+ assertQ(req("id:101"),"count(//arr[@name='str_s']/str)=0");
+ assertQ(req("id:102"),"count(//arr[@name='str_s']/str)=0");
+ assertQ(req("id:103"),"count(//arr[@name='str_s']/str)=0");
+ assertQ(req("id:101"),"//arr[@name='my_s']/str[.='EMPTY']");
+ assertQ(req("id:102"),"//arr[@name='my_s']/str[.='EMPTY']");
+ assertQ(req("id:103"),"//arr[@name='my_s']/str[.='EMPTY']");
// test that header in file was skipped
assertQ(req("id:id"),"//*[@numFound='0']");
@@ -207,24 +208,24 @@ public class TestCSVLoader extends SolrT
// test skipping a field via the "skip" parameter
loadLocal("stream.file",filename,"commit","true","keepEmpty","true","skip","str_s");
assertQ(req("id:[100 TO 110]"),"//*[@numFound='4']");
- assertQ(req("id:[100 TO 110]"),"count(//str[@name='str_s'])=0");
+ assertQ(req("id:[100 TO 110]"),"count(//str[@name='str_s']/str)=0");
// test skipping a field by specifying an empty name
loadLocal("stream.file",filename,"commit","true","keepEmpty","true","fieldnames","id,");
assertQ(req("id:[100 TO 110]"),"//*[@numFound='4']");
- assertQ(req("id:[100 TO 110]"),"count(//str[@name='str_s'])=0");
+ assertQ(req("id:[100 TO 110]"),"count(//str[@name='str_s']/str)=0");
// test loading file as if it didn't have a header
loadLocal("stream.file",filename, "commit","true",
"fieldnames","id,my_s", "header","false");
assertQ(req("id:id"),"//*[@numFound='1']");
- assertQ(req("id:100"),"//str[@name='my_s'][.='quoted']");
+ assertQ(req("id:100"),"//arr[@name='my_s']/str[.='quoted']");
// test skipLines
loadLocal("stream.file",filename, "commit","true",
"fieldnames","id,my_s", "header","false", "skipLines","1");
assertQ(req("id:id"),"//*[@numFound='1']");
- assertQ(req("id:100"),"//str[@name='my_s'][.='quoted']");
+ assertQ(req("id:100"),"//arr[@name='my_s']/str[.='quoted']");
// test multi-valued fields via field splitting w/ mapping of subvalues
@@ -237,12 +238,12 @@ public class TestCSVLoader extends SolrT
"f.str_s.map",":EMPTY",
"f.str_s.split","true");
assertQ(req("id:[100 TO 110]"),"//*[@numFound='4']");
- assertQ(req("id:100"),"//str[@name='str_s'][.='quoted']");
+ assertQ(req("id:100"),"//arr[@name='str_s']/str[.='quoted']");
assertQ(req("id:101"),"//arr[@name='str_s']/str[1][.='a']");
assertQ(req("id:101"),"//arr[@name='str_s']/str[2][.='b']");
assertQ(req("id:101"),"//arr[@name='str_s']/str[3][.='c']");
assertQ(req("id:102"),"//arr[@name='str_s']/str[2][.='EMPTY']");
- assertQ(req("id:103"),"//str[@name='str_s'][.='EMPTY']");
+ assertQ(req("id:103"),"//arr[@name='str_s']/str[.='EMPTY']");
// test alternate values for delimiters
@@ -263,13 +264,13 @@ public class TestCSVLoader extends SolrT
"f.str_s.encapsulator","'"
);
assertQ(req("id:[100 TO 110]"),"//*[@numFound='5']");
- assertQ(req("id:100"),"//str[@name='str_s'][.='quoted']");
+ assertQ(req("id:100"),"//arr[@name='str_s']/str[.='quoted']");
assertQ(req("id:101"),"//arr[@name='str_s']/str[1][.='a']");
assertQ(req("id:101"),"//arr[@name='str_s']/str[2][.='b']");
assertQ(req("id:101"),"//arr[@name='str_s']/str[3][.='c']");
assertQ(req("id:102"),"//arr[@name='str_s']/str[2][.='EMPTY']");
- assertQ(req("id:103"),"//str[@name='str_s'][.='EMPTY']");
- assertQ(req("id:104"),"//str[@name='str_s'][.='a\\\\b']");
+ assertQ(req("id:103"),"//arr[@name='str_s']/str[.='EMPTY']");
+ assertQ(req("id:104"),"//arr[@name='str_s']/str[.='a\\\\b']");
// test no escaping + double encapsulator escaping by default
makeFile("id,str_s\n"
@@ -279,9 +280,9 @@ public class TestCSVLoader extends SolrT
);
loadLocal("stream.file",filename, "commit","true"
);
- assertQ(req("id:100"),"//str[@name='str_s'][.='quoted \" \\ string']");
- assertQ(req("id:101"),"//str[@name='str_s'][.='unquoted \"\" \\ string']");
- assertQ(req("id:102"),"//str[@name='str_s'][.='end quote \\']");
+ assertQ(req("id:100"),"//arr[@name='str_s']/str[.='quoted \" \\ string']");
+ assertQ(req("id:101"),"//arr[@name='str_s']/str[.='unquoted \"\" \\ string']");
+ assertQ(req("id:102"),"//arr[@name='str_s']/str[.='end quote \\']");
// setting an escape should disable encapsulator
@@ -292,8 +293,8 @@ public class TestCSVLoader extends SolrT
loadLocal("stream.file",filename, "commit","true"
,"escape","\\"
);
- assertQ(req("id:100"),"//str[@name='str_s'][.='\"quoted \"\" \" \\ string\"']");
- assertQ(req("id:101"),"//str[@name='str_s'][.='unquoted \"\" \" , \\ string']");
+ assertQ(req("id:100"),"//arr[@name='str_s']/str[.='\"quoted \"\" \" \\ string\"']");
+ assertQ(req("id:101"),"//arr[@name='str_s']/str[.='unquoted \"\" \" , \\ string']");
}
Modified: lucene/dev/branches/docvalues/solr/src/test/org/apache/solr/request/SimpleFacetsTest.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/docvalues/solr/src/test/org/apache/solr/request/SimpleFacetsTest.java?rev=1086181&r1=1086180&r2=1086181&view=diff
==============================================================================
--- lucene/dev/branches/docvalues/solr/src/test/org/apache/solr/request/SimpleFacetsTest.java (original)
+++ lucene/dev/branches/docvalues/solr/src/test/org/apache/solr/request/SimpleFacetsTest.java Mon Mar 28 10:50:28 2011
@@ -370,6 +370,12 @@ public class SimpleFacetsTest extends So
final String pre = "//lst[@name='"+b+"']/lst[@name='"+f+"']" + c;
final String meta = pre + (rangeMode ? "/../" : "");
+
+ // date faceting defaults to include both endpoints,
+ // range faceting defaults to including only lower
+ // doc exists with value @ 00:00:00.000 on July5
+ final String jul4 = rangeMode ? "[.='1' ]" : "[.='2' ]";
+
assertQ("check counts for month of facet by day",
req( "q", "*:*"
,"rows", "0"
@@ -381,12 +387,10 @@ public class SimpleFacetsTest extends So
,p+".other", "all"
)
,"*[count("+pre+"/int)="+(rangeMode ? 31 : 34)+"]"
- ,pre+"/int[@name='1976-07-01T00:00:00Z'][.='0' ]"
- ,pre+"/int[@name='1976-07-02T00:00:00Z'][.='0' ]"
+ ,pre+"/int[@name='1976-07-01T00:00:00Z'][.='0']"
+ ,pre+"/int[@name='1976-07-02T00:00:00Z'][.='0']"
,pre+"/int[@name='1976-07-03T00:00:00Z'][.='2' ]"
- // july4th = 2 because exists doc @ 00:00:00.000 on July5
- // (date faceting is inclusive)
- ,pre+"/int[@name='1976-07-04T00:00:00Z'][.='2' ]"
+ ,pre+"/int[@name='1976-07-04T00:00:00Z']" + jul4
,pre+"/int[@name='1976-07-05T00:00:00Z'][.='2' ]"
,pre+"/int[@name='1976-07-06T00:00:00Z'][.='0']"
,pre+"/int[@name='1976-07-07T00:00:00Z'][.='0']"
@@ -433,9 +437,7 @@ public class SimpleFacetsTest extends So
)
,"*[count("+pre+"/int)="+(rangeMode ? 8 : 11)+"]"
,pre+"/int[@name='1976-07-03T00:00:00Z'][.='2' ]"
- // july4th = 2 because exists doc @ 00:00:00.000 on July5
- // (date faceting is inclusive)
- ,pre+"/int[@name='1976-07-04T00:00:00Z'][.='2' ]"
+ ,pre+"/int[@name='1976-07-04T00:00:00Z']" + jul4
,pre+"/int[@name='1976-07-05T00:00:00Z'][.='2' ]"
,pre+"/int[@name='1976-07-12T00:00:00Z'][.='1' ]"
,pre+"/int[@name='1976-07-13T00:00:00Z'][.='1' ]"
@@ -458,11 +460,9 @@ public class SimpleFacetsTest extends So
,p+".other", "all"
,"f." + f + ".facet.mincount", "2"
)
- ,"*[count("+pre+"/int)="+(rangeMode ? 4 : 7)+"]"
+ ,"*[count("+pre+"/int)="+(rangeMode ? 3 : 7)+"]"
,pre+"/int[@name='1976-07-03T00:00:00Z'][.='2' ]"
- // july4th = 2 because exists doc @ 00:00:00.000 on July5
- // (date faceting is inclusive)
- ,pre+"/int[@name='1976-07-04T00:00:00Z'][.='2' ]"
+ ,pre+(rangeMode ? "" : "/int[@name='1976-07-04T00:00:00Z']" +jul4)
,pre+"/int[@name='1976-07-05T00:00:00Z'][.='2' ]"
,pre+"/int[@name='1976-07-15T00:00:00Z'][.='2' ]"
,meta+"/int[@name='before' ][.='2']"
@@ -482,11 +482,11 @@ public class SimpleFacetsTest extends So
)
,"*[count("+pre+"/int)="+(rangeMode ? 2 : 5)+"]"
,pre+"/int[@name='1976-07-05T00:00:00Z'][.='2' ]"
- ,pre+"/int[@name='1976-07-06T00:00:00Z'][.='0' ]"
+ ,pre+"/int[@name='1976-07-06T00:00:00Z'][.='0']"
,meta+"/int[@name='before' ][.='5']"
);
- assertQ("check after is not inclusive of lower bound by default",
+ assertQ("check after is not inclusive of lower bound by default (for dates)",
req("q", "*:*"
,"rows", "0"
,"facet", "true"
@@ -498,9 +498,9 @@ public class SimpleFacetsTest extends So
)
,"*[count("+pre+"/int)="+(rangeMode ? 2 : 5)+"]"
,pre+"/int[@name='1976-07-03T00:00:00Z'][.='2' ]"
- ,pre+"/int[@name='1976-07-04T00:00:00Z'][.='2' ]"
+ ,pre+"/int[@name='1976-07-04T00:00:00Z']" + jul4
- ,meta+"/int[@name='after' ][.='8']"
+ ,meta+"/int[@name='after' ][.='"+(rangeMode ? 9 : 8)+"']"
);
Modified: lucene/dev/branches/docvalues/solr/src/test/org/apache/solr/response/TestCSVResponseWriter.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/docvalues/solr/src/test/org/apache/solr/response/TestCSVResponseWriter.java?rev=1086181&r1=1086180&r2=1086181&view=diff
==============================================================================
--- lucene/dev/branches/docvalues/solr/src/test/org/apache/solr/response/TestCSVResponseWriter.java (original)
+++ lucene/dev/branches/docvalues/solr/src/test/org/apache/solr/response/TestCSVResponseWriter.java Mon Mar 28 10:50:28 2011
@@ -22,7 +22,7 @@ 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.apache.solr.search.ReturnFields;
import org.junit.*;
import java.io.StringWriter;
@@ -129,19 +129,19 @@ public class TestCSVResponseWriter exten
rsp.add("response", sdl);
QueryResponseWriter w = new CSVResponseWriter();
- SolrPluginUtils.setReturnFields("id,foo_s", rsp);
+ rsp.setReturnFields( new ReturnFields("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( new ReturnFields("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( new ReturnFields("*", 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 +151,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( new ReturnFields("*,score", req) );
buf = new StringWriter();
w.write(buf, req, rsp);
String s = buf.toString();
Modified: lucene/dev/branches/docvalues/solr/src/test/org/apache/solr/schema/BadIndexSchemaTest.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/docvalues/solr/src/test/org/apache/solr/schema/BadIndexSchemaTest.java?rev=1086181&r1=1086180&r2=1086181&view=diff
==============================================================================
--- lucene/dev/branches/docvalues/solr/src/test/org/apache/solr/schema/BadIndexSchemaTest.java (original)
+++ lucene/dev/branches/docvalues/solr/src/test/org/apache/solr/schema/BadIndexSchemaTest.java Mon Mar 28 10:50:28 2011
@@ -22,6 +22,8 @@ import org.apache.solr.common.SolrExcept
import org.apache.solr.common.SolrException.ErrorCode;
import org.apache.solr.core.SolrConfig;
+import java.util.regex.Pattern;
+
import org.junit.Test;
public class BadIndexSchemaTest extends SolrTestCaseJ4 {
@@ -29,7 +31,7 @@ public class BadIndexSchemaTest extends
private void doTest(final String schema, final String errString)
throws Exception {
- ignoreException(errString);
+ ignoreException(Pattern.quote(errString));
try {
initCore( "solrconfig.xml", schema );
} catch (SolrException e) {
@@ -60,4 +62,9 @@ public class BadIndexSchemaTest extends
public void testSevereErrorsForDuplicateFieldType() throws Exception {
doTest("bad-schema-dup-fieldType.xml", "ftAgain");
}
+
+ @Test
+ public void testSevereErrorsForUnexpectedAnalyzer() throws Exception {
+ doTest("bad-schema-nontext-analyzer.xml", "StrField (bad_type)");
+ }
}
Modified: lucene/dev/branches/docvalues/solr/src/test/org/apache/solr/schema/MockConfigurableSimilarity.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/docvalues/solr/src/test/org/apache/solr/schema/MockConfigurableSimilarity.java?rev=1086181&r1=1086180&r2=1086181&view=diff
==============================================================================
--- lucene/dev/branches/docvalues/solr/src/test/org/apache/solr/schema/MockConfigurableSimilarity.java (original)
+++ lucene/dev/branches/docvalues/solr/src/test/org/apache/solr/schema/MockConfigurableSimilarity.java Mon Mar 28 10:50:28 2011
@@ -16,9 +16,9 @@
*/
package org.apache.solr.schema;
-import org.apache.lucene.search.DefaultSimilarity;
+import org.apache.lucene.search.DefaultSimilarityProvider;
-public class MockConfigurableSimilarity extends DefaultSimilarity {
+public class MockConfigurableSimilarity extends DefaultSimilarityProvider {
private String passthrough;
public MockConfigurableSimilarity(String passthrough) {
Modified: lucene/dev/branches/docvalues/solr/src/test/org/apache/solr/search/TestFastLRUCache.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/docvalues/solr/src/test/org/apache/solr/search/TestFastLRUCache.java?rev=1086181&r1=1086180&r2=1086181&view=diff
==============================================================================
--- lucene/dev/branches/docvalues/solr/src/test/org/apache/solr/search/TestFastLRUCache.java (original)
+++ lucene/dev/branches/docvalues/solr/src/test/org/apache/solr/search/TestFastLRUCache.java Mon Mar 28 10:50:28 2011
@@ -254,6 +254,18 @@ public class TestFastLRUCache extends Lu
cache.destroy();
}
+ // enough randomness to exercise all of the different cache purging phases
+ public void testRandom() {
+ int sz = random.nextInt(100)+5;
+ int lowWaterMark = random.nextInt(sz-3)+1;
+ int keyrange = random.nextInt(sz*3)+1;
+ ConcurrentLRUCache<Integer, String> cache = new ConcurrentLRUCache<Integer, String>(sz, lowWaterMark);
+ for (int i=0; i<10000; i++) {
+ cache.put(random.nextInt(keyrange), "");
+ cache.get(random.nextInt(keyrange));
+ }
+ }
+
void doPerfTest(int iter, int cacheSize, int maxKey) {
long start = System.currentTimeMillis();
Modified: lucene/dev/branches/docvalues/solr/src/test/org/apache/solr/search/TestRangeQuery.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/docvalues/solr/src/test/org/apache/solr/search/TestRangeQuery.java?rev=1086181&r1=1086180&r2=1086181&view=diff
==============================================================================
--- lucene/dev/branches/docvalues/solr/src/test/org/apache/solr/search/TestRangeQuery.java (original)
+++ lucene/dev/branches/docvalues/solr/src/test/org/apache/solr/search/TestRangeQuery.java Mon Mar 28 10:50:28 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/branches/docvalues/solr/src/test/org/apache/solr/search/TestSolrQueryParser.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/docvalues/solr/src/test/org/apache/solr/search/TestSolrQueryParser.java?rev=1086181&r1=1086180&r2=1086181&view=diff
==============================================================================
--- lucene/dev/branches/docvalues/solr/src/test/org/apache/solr/search/TestSolrQueryParser.java (original)
+++ lucene/dev/branches/docvalues/solr/src/test/org/apache/solr/search/TestSolrQueryParser.java Mon Mar 28 10:50:28 2011
@@ -17,6 +17,7 @@
package org.apache.solr.search;
import org.apache.solr.SolrTestCaseJ4;
+import org.apache.solr.response.transform.ScoreAugmenter;
import org.junit.BeforeClass;
import org.junit.Test;
@@ -49,4 +50,32 @@ public class TestSolrQueryParser extends
);
}
+ @Test
+ public void testReturnFields() {
+ ReturnFields rf = new ReturnFields( req("fl", "id,score") );
+ assertTrue( rf.wantsScore() );
+ assertTrue( rf.wantsField( "score" ) );
+ assertTrue( rf.wantsField( "id" ) );
+ assertFalse( rf.wantsField( "xxx" ) );
+ assertTrue( rf.getTransformer() instanceof ScoreAugmenter );
+
+ rf = new ReturnFields( req("fl", "*") );
+ assertFalse( rf.wantsScore() );
+ assertTrue( rf.wantsField( "xxx" ) );
+ assertTrue( rf.wantsAllFields() );
+ assertNull( rf.getTransformer() );
+
+ rf = new ReturnFields( req("fl", "_explain_") );
+ assertFalse( rf.wantsScore() );
+ assertFalse( rf.wantsField( "id" ) );
+ assertEquals( "_explain_", rf.getTransformer().getName() );
+
+ // Check that we want wildcards
+ rf = new ReturnFields( req("fl", "id,aaa*,*bbb") );
+ assertTrue( rf.wantsField( "id" ) );
+ assertTrue( rf.wantsField( "aaaa" ) );
+ assertTrue( rf.wantsField( "xxxbbb" ) );
+ assertFalse( rf.wantsField( "aa" ) );
+ assertFalse( rf.wantsField( "bb" ) );
+ }
}
Modified: lucene/dev/branches/docvalues/solr/src/test/org/apache/solr/spelling/suggest/SuggesterTest.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/docvalues/solr/src/test/org/apache/solr/spelling/suggest/SuggesterTest.java?rev=1086181&r1=1086180&r2=1086181&view=diff
==============================================================================
--- lucene/dev/branches/docvalues/solr/src/test/org/apache/solr/spelling/suggest/SuggesterTest.java (original)
+++ lucene/dev/branches/docvalues/solr/src/test/org/apache/solr/spelling/suggest/SuggesterTest.java Mon Mar 28 10:50:28 2011
@@ -27,6 +27,7 @@ import org.apache.solr.util.TermFreqIter
import org.junit.BeforeClass;
import org.junit.Test;
+import java.io.File;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@@ -65,6 +66,29 @@ public class SuggesterTest extends SolrT
@Test
public void testReload() throws Exception {
+ String leaveData = System.getProperty("solr.test.leavedatadir");
+ if (leaveData == null) leaveData = "";
+ System.setProperty("solr.test.leavedatadir", "true");
+ addDocs();
+ assertU(commit());
+ File data = dataDir;
+ String config = configString;
+ deleteCore();
+ dataDir = data;
+ configString = config;
+ initCore();
+ assertQ(req("qt","/suggest", "q","ac", SpellingParams.SPELLCHECK_COUNT, "2", SpellingParams.SPELLCHECK_ONLY_MORE_POPULAR, "true"),
+ "//lst[@name='spellcheck']/lst[@name='suggestions']/lst[@name='ac']/int[@name='numFound'][.='2']",
+ "//lst[@name='spellcheck']/lst[@name='suggestions']/lst[@name='ac']/arr[@name='suggestion']/str[1][.='acquire']",
+ "//lst[@name='spellcheck']/lst[@name='suggestions']/lst[@name='ac']/arr[@name='suggestion']/str[2][.='accommodate']"
+ );
+
+ // restore the property
+ System.setProperty("solr.test.leavedatadir", leaveData);
+ }
+
+ @Test
+ public void testRebuild() throws Exception {
addDocs();
assertU(commit());
assertQ(req("qt","/suggest", "q","ac", SpellingParams.SPELLCHECK_COUNT, "2", SpellingParams.SPELLCHECK_ONLY_MORE_POPULAR, "true"),
Modified: lucene/dev/branches/docvalues/solr/src/test/org/apache/solr/update/DocumentBuilderTest.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/docvalues/solr/src/test/org/apache/solr/update/DocumentBuilderTest.java?rev=1086181&r1=1086180&r2=1086181&view=diff
==============================================================================
--- lucene/dev/branches/docvalues/solr/src/test/org/apache/solr/update/DocumentBuilderTest.java (original)
+++ lucene/dev/branches/docvalues/solr/src/test/org/apache/solr/update/DocumentBuilderTest.java Mon Mar 28 10:50:28 2011
@@ -67,6 +67,40 @@ public class DocumentBuilderTest extends
}
@Test
+ public void testExceptions()
+ {
+ SolrCore core = h.getCore();
+
+ // make sure a null value is not indexed
+ SolrInputDocument doc = new SolrInputDocument();
+ doc.addField( "id", "123", 1.0f );
+ doc.addField( "unknown", "something", 1.0f );
+ try {
+ DocumentBuilder.toDocument( doc, core.getSchema() );
+ fail( "added an unknown field" );
+ }
+ catch( Exception ex ) {
+ assertTrue( "should have document ID", ex.getMessage().indexOf( "doc=123" ) > 0 );
+ }
+ doc.remove( "unknown" );
+
+
+ doc.addField( "weight", "not a number", 1.0f );
+ try {
+ DocumentBuilder.toDocument( doc, core.getSchema() );
+ fail( "invalid 'float' field value" );
+ }
+ catch( Exception ex ) {
+ assertTrue( "should have document ID", ex.getMessage().indexOf( "doc=123" ) > 0 );
+ assertTrue( "cause is number format", ex.getCause() instanceof NumberFormatException );
+ }
+
+ // now make sure it is OK
+ doc.setField( "weight", "1.34", 1.0f );
+ DocumentBuilder.toDocument( doc, core.getSchema() );
+ }
+
+ @Test
public void testMultiField() throws Exception {
SolrCore core = h.getCore();
Modified: lucene/dev/branches/docvalues/solr/src/test/org/apache/solr/util/AbstractSolrTestCase.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/docvalues/solr/src/test/org/apache/solr/util/AbstractSolrTestCase.java?rev=1086181&r1=1086180&r2=1086181&view=diff
==============================================================================
--- lucene/dev/branches/docvalues/solr/src/test/org/apache/solr/util/AbstractSolrTestCase.java (original)
+++ lucene/dev/branches/docvalues/solr/src/test/org/apache/solr/util/AbstractSolrTestCase.java Mon Mar 28 10:50:28 2011
@@ -25,6 +25,7 @@ import org.apache.solr.core.SolrConfig;
import org.apache.solr.common.SolrException;
import org.apache.solr.common.SolrInputDocument;
import org.apache.solr.common.SolrInputField;
+import org.apache.solr.common.params.CommonParams;
import org.apache.solr.common.util.XML;
import org.apache.solr.request.*;
import org.apache.solr.util.TestHarness;
@@ -132,7 +133,7 @@ public abstract class AbstractSolrTestCa
solrConfig,
getSchemaFile());
lrf = h.getRequestFactory
- ("standard",0,20,"version","2.2");
+ ("standard",0,20,CommonParams.VERSION,"2.2");
}
log.info("####SETUP_END " + getName());
}
Modified: lucene/dev/branches/docvalues/solr/src/webapp/src/org/apache/solr/client/solrj/embedded/EmbeddedSolrServer.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/docvalues/solr/src/webapp/src/org/apache/solr/client/solrj/embedded/EmbeddedSolrServer.java?rev=1086181&r1=1086180&r2=1086181&view=diff
==============================================================================
--- lucene/dev/branches/docvalues/solr/src/webapp/src/org/apache/solr/client/solrj/embedded/EmbeddedSolrServer.java (original)
+++ lucene/dev/branches/docvalues/solr/src/webapp/src/org/apache/solr/client/solrj/embedded/EmbeddedSolrServer.java Mon Mar 28 10:50:28 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 );
}
Modified: lucene/dev/branches/docvalues/solr/src/webapp/src/org/apache/solr/servlet/SolrDispatchFilter.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/docvalues/solr/src/webapp/src/org/apache/solr/servlet/SolrDispatchFilter.java?rev=1086181&r1=1086180&r2=1086181&view=diff
==============================================================================
--- lucene/dev/branches/docvalues/solr/src/webapp/src/org/apache/solr/servlet/SolrDispatchFilter.java (original)
+++ lucene/dev/branches/docvalues/solr/src/webapp/src/org/apache/solr/servlet/SolrDispatchFilter.java Mon Mar 28 10:50:28 2011
@@ -18,13 +18,17 @@
package org.apache.solr.servlet;
import java.io.IOException;
+import java.io.Writer;
import java.io.PrintWriter;
import java.io.StringWriter;
+import java.io.OutputStreamWriter;
import java.io.ByteArrayInputStream;
+import java.nio.charset.Charset;
import java.util.Map;
import java.util.WeakHashMap;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import org.xml.sax.InputSource;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
@@ -39,6 +43,8 @@ import org.apache.solr.common.SolrExcept
import org.apache.solr.common.util.NamedList;
import org.apache.solr.common.util.SimpleOrderedMap;
import org.apache.solr.common.params.CommonParams;
+import org.apache.solr.common.util.FastWriter;
+import org.apache.solr.common.util.ContentStreamBase;
import org.apache.solr.core.*;
import org.apache.solr.request.*;
import org.apache.solr.response.BinaryQueryResponseWriter;
@@ -62,10 +68,12 @@ public class SolrDispatchFilter implemen
protected String solrConfigFilename = null;
protected final Map<SolrConfig, SolrRequestParsers> parsers = new WeakHashMap<SolrConfig, SolrRequestParsers>();
protected final SolrRequestParsers adminRequestParser;
+
+ private static final Charset UTF8 = Charset.forName("UTF-8");
public SolrDispatchFilter() {
try {
- adminRequestParser = new SolrRequestParsers(new Config(null,"solr",new ByteArrayInputStream("<root/>".getBytes("UTF-8")),"") );
+ adminRequestParser = new SolrRequestParsers(new Config(null,"solr",new InputSource(new ByteArrayInputStream("<root/>".getBytes("UTF-8"))),"") );
} catch (Exception e) {
//unlikely
throw new SolrException(SolrException.ErrorCode.SERVER_ERROR,e);
@@ -318,14 +326,19 @@ public class SolrDispatchFilter implemen
final String ct = responseWriter.getContentType(solrReq, solrRsp);
// don't call setContentType on null
if (null != ct) response.setContentType(ct);
+
if (Method.HEAD != reqMethod) {
if (responseWriter instanceof BinaryQueryResponseWriter) {
BinaryQueryResponseWriter binWriter = (BinaryQueryResponseWriter) responseWriter;
binWriter.write(response.getOutputStream(), solrReq, solrRsp);
} else {
- PrintWriter out = response.getWriter();
+ String charset = ContentStreamBase.getCharsetFromContentType(ct);
+ Writer out = (charset == null || charset.equalsIgnoreCase("UTF-8"))
+ ? new OutputStreamWriter(response.getOutputStream(), UTF8)
+ : new OutputStreamWriter(response.getOutputStream(), charset);
+ out = new FastWriter(out);
responseWriter.write(out, solrReq, solrRsp);
-
+ out.flush();
}
}
//else http HEAD request, nothing to write out, waited this long just to get ContentType
Modified: lucene/dev/branches/docvalues/solr/src/webapp/web/admin/analysis.jsp
URL: http://svn.apache.org/viewvc/lucene/dev/branches/docvalues/solr/src/webapp/web/admin/analysis.jsp?rev=1086181&r1=1086180&r2=1086181&view=diff
==============================================================================
--- lucene/dev/branches/docvalues/solr/src/webapp/web/admin/analysis.jsp (original)
+++ lucene/dev/branches/docvalues/solr/src/webapp/web/admin/analysis.jsp Mon Mar 28 10:50:28 2011
@@ -156,10 +156,10 @@
TermToBytesRefAttribute bytesAtt = tstream.getAttribute(TermToBytesRefAttribute.class);
tstream.reset();
matches = new HashSet<BytesRef>();
+ final BytesRef bytes = bytesAtt.getBytesRef();
while (tstream.incrementToken()) {
- final BytesRef bytes = new BytesRef();
- bytesAtt.toBytesRef(bytes);
- matches.add(bytes);
+ bytesAtt.fillBytesRef();
+ matches.add(new BytesRef(bytes));
}
}
@@ -273,14 +273,17 @@
}
private static class Tok {
- final BytesRef bytes = new BytesRef();
+ final BytesRef bytes;
final String rawText, text;
final int pos;
final List<ReflectItem> reflected = new ArrayList<ReflectItem>();
Tok(AttributeSource token, int pos, FieldType ft) {
this.pos = pos;
- token.getAttribute(TermToBytesRefAttribute.class).toBytesRef(bytes);
+ TermToBytesRefAttribute termAtt = token.getAttribute(TermToBytesRefAttribute.class);
+ BytesRef spare = termAtt.getBytesRef();
+ termAtt.fillBytesRef();
+ bytes = new BytesRef(spare);
rawText = (token.hasAttribute(CharTermAttribute.class)) ?
token.getAttribute(CharTermAttribute.class).toString() : null;
final CharArr textBuf = new CharArr(bytes.length);
Modified: lucene/dev/branches/docvalues/solr/src/webapp/web/admin/analysis.xsl
URL: http://svn.apache.org/viewvc/lucene/dev/branches/docvalues/solr/src/webapp/web/admin/analysis.xsl?rev=1086181&r1=1086180&r2=1086181&view=diff
==============================================================================
--- lucene/dev/branches/docvalues/solr/src/webapp/web/admin/analysis.xsl (original)
+++ lucene/dev/branches/docvalues/solr/src/webapp/web/admin/analysis.xsl Mon Mar 28 10:50:28 2011
@@ -26,7 +26,7 @@
method="html"
indent="yes"
encoding="utf-8"
- media-type="text/html; charset=UTF-8"
+ media-type="text/html"
doctype-public="-//W3C//DTD HTML 4.01//EN"
doctype-system="http://www.w3.org/TR/html4/strict.dtd" />
Modified: lucene/dev/branches/docvalues/solr/src/webapp/web/admin/meta.xsl
URL: http://svn.apache.org/viewvc/lucene/dev/branches/docvalues/solr/src/webapp/web/admin/meta.xsl?rev=1086181&r1=1086180&r2=1086181&view=diff
==============================================================================
--- lucene/dev/branches/docvalues/solr/src/webapp/web/admin/meta.xsl (original)
+++ lucene/dev/branches/docvalues/solr/src/webapp/web/admin/meta.xsl Mon Mar 28 10:50:28 2011
@@ -21,7 +21,7 @@
<xsl:output
method="html"
encoding="utf-8"
- media-type="text/html; charset=UTF-8"
+ media-type="text/html"
indent="yes"
doctype-public="-//W3C//DTD HTML 4.01//EN"
doctype-system="http://www.w3.org/TR/html4/strict.dtd" />
Modified: lucene/dev/branches/docvalues/solr/src/webapp/web/admin/registry.xsl
URL: http://svn.apache.org/viewvc/lucene/dev/branches/docvalues/solr/src/webapp/web/admin/registry.xsl?rev=1086181&r1=1086180&r2=1086181&view=diff
==============================================================================
--- lucene/dev/branches/docvalues/solr/src/webapp/web/admin/registry.xsl (original)
+++ lucene/dev/branches/docvalues/solr/src/webapp/web/admin/registry.xsl Mon Mar 28 10:50:28 2011
@@ -26,7 +26,7 @@
<xsl:output
method="html"
encoding="utf-8"
- media-type="text/html; charset=UTF-8"
+ media-type="text/html"
indent="yes"
doctype-public="-//W3C//DTD HTML 4.01//EN"
doctype-system="http://www.w3.org/TR/html4/strict.dtd" />
Modified: lucene/dev/branches/docvalues/solr/src/webapp/web/admin/stats.xsl
URL: http://svn.apache.org/viewvc/lucene/dev/branches/docvalues/solr/src/webapp/web/admin/stats.xsl?rev=1086181&r1=1086180&r2=1086181&view=diff
==============================================================================
--- lucene/dev/branches/docvalues/solr/src/webapp/web/admin/stats.xsl (original)
+++ lucene/dev/branches/docvalues/solr/src/webapp/web/admin/stats.xsl Mon Mar 28 10:50:28 2011
@@ -26,7 +26,7 @@
<xsl:output
method="html"
encoding="utf-8"
- media-type="text/html; charset=UTF-8"
+ media-type="text/html"
indent="yes"
doctype-public="-//W3C//DTD HTML 4.01//EN"
doctype-system="http://www.w3.org/TR/html4/strict.dtd" />
Modified: lucene/dev/branches/docvalues/solr/src/webapp/web/admin/tabular.xsl
URL: http://svn.apache.org/viewvc/lucene/dev/branches/docvalues/solr/src/webapp/web/admin/tabular.xsl?rev=1086181&r1=1086180&r2=1086181&view=diff
==============================================================================
--- lucene/dev/branches/docvalues/solr/src/webapp/web/admin/tabular.xsl (original)
+++ lucene/dev/branches/docvalues/solr/src/webapp/web/admin/tabular.xsl Mon Mar 28 10:50:28 2011
@@ -27,7 +27,7 @@
<xsl:output
method="html"
encoding="utf-8"
- media-type="text/html; charset=UTF-8"
+ media-type="text/html"
indent="yes"
doctype-public="-//W3C//DTD HTML 4.01//EN"
doctype-system="http://www.w3.org/TR/html4/strict.dtd" />
Modified: lucene/dev/branches/docvalues/solr/src/webapp/web/admin/threaddump.xsl
URL: http://svn.apache.org/viewvc/lucene/dev/branches/docvalues/solr/src/webapp/web/admin/threaddump.xsl?rev=1086181&r1=1086180&r2=1086181&view=diff
==============================================================================
--- lucene/dev/branches/docvalues/solr/src/webapp/web/admin/threaddump.xsl (original)
+++ lucene/dev/branches/docvalues/solr/src/webapp/web/admin/threaddump.xsl Mon Mar 28 10:50:28 2011
@@ -26,7 +26,7 @@
method="html"
indent="yes"
encoding="utf-8"
- media-type="text/html; charset=UTF-8"
+ media-type="text/html"
doctype-public="-//W3C//DTD HTML 4.01//EN"
doctype-system="http://www.w3.org/TR/html4/strict.dtd" />