Return-Path: Delivered-To: apmail-lucene-commits-archive@www.apache.org Received: (qmail 87592 invoked from network); 13 Apr 2011 11:23:35 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (140.211.11.3) by minotaur.apache.org with SMTP; 13 Apr 2011 11:23:35 -0000 Received: (qmail 95331 invoked by uid 500); 13 Apr 2011 11:23:35 -0000 Mailing-List: contact commits-help@lucene.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@lucene.apache.org Delivered-To: mailing list commits@lucene.apache.org Received: (qmail 95324 invoked by uid 99); 13 Apr 2011 11:23:35 -0000 Received: from nike.apache.org (HELO nike.apache.org) (192.87.106.230) by apache.org (qpsmtpd/0.29) with ESMTP; Wed, 13 Apr 2011 11:23:35 +0000 X-ASF-Spam-Status: No, hits=-2000.0 required=5.0 tests=ALL_TRUSTED,T_FRT_STOCK2 X-Spam-Check-By: apache.org Received: from [140.211.11.4] (HELO eris.apache.org) (140.211.11.4) by apache.org (qpsmtpd/0.29) with ESMTP; Wed, 13 Apr 2011 11:23:21 +0000 Received: by eris.apache.org (Postfix, from userid 65534) id 3A7F42388C06; Wed, 13 Apr 2011 11:22:35 +0000 (UTC) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r1091748 [8/8] - in /lucene/dev/branches/realtime_search: ./ dev-tools/idea/lucene/contrib/ant/ dev-tools/idea/lucene/contrib/db/bdb-je/ dev-tools/idea/lucene/contrib/db/bdb/ dev-tools/idea/lucene/contrib/demo/ dev-tools/idea/lucene/contrib... Date: Wed, 13 Apr 2011 11:22:31 -0000 To: commits@lucene.apache.org From: simonw@apache.org X-Mailer: svnmailer-1.0.8 Message-Id: <20110413112235.3A7F42388C06@eris.apache.org> X-Virus-Checked: Checked by ClamAV on apache.org Modified: lucene/dev/branches/realtime_search/lucene/src/test/org/apache/lucene/search/function/TestValueSource.java URL: http://svn.apache.org/viewvc/lucene/dev/branches/realtime_search/lucene/src/test/org/apache/lucene/search/function/TestValueSource.java?rev=1091748&r1=1091747&r2=1091748&view=diff ============================================================================== --- lucene/dev/branches/realtime_search/lucene/src/test/org/apache/lucene/search/function/TestValueSource.java (original) +++ lucene/dev/branches/realtime_search/lucene/src/test/org/apache/lucene/search/function/TestValueSource.java Wed Apr 13 11:22:24 2011 @@ -29,7 +29,7 @@ public class TestValueSource extends Luc public void testMultiValueSource() throws Exception { Directory dir = newDirectory(); - IndexWriter w = new IndexWriter(dir, new IndexWriterConfig(TEST_VERSION_CURRENT, new MockAnalyzer()).setMergePolicy(newLogMergePolicy())); + IndexWriter w = new IndexWriter(dir, new IndexWriterConfig(TEST_VERSION_CURRENT, new MockAnalyzer(random)).setMergePolicy(newLogMergePolicy())); Document doc = new Document(); Field f = newField("field", "", Field.Store.NO, Field.Index.NOT_ANALYZED); doc.add(f); Modified: lucene/dev/branches/realtime_search/lucene/src/test/org/apache/lucene/search/spans/TestBasics.java URL: http://svn.apache.org/viewvc/lucene/dev/branches/realtime_search/lucene/src/test/org/apache/lucene/search/spans/TestBasics.java?rev=1091748&r1=1091747&r2=1091748&view=diff ============================================================================== --- lucene/dev/branches/realtime_search/lucene/src/test/org/apache/lucene/search/spans/TestBasics.java (original) +++ lucene/dev/branches/realtime_search/lucene/src/test/org/apache/lucene/search/spans/TestBasics.java Wed Apr 13 11:22:24 2011 @@ -18,13 +18,19 @@ package org.apache.lucene.search.spans; */ import java.io.IOException; +import java.io.Reader; import java.util.ArrayList; import java.util.Collection; import java.util.Collections; import java.util.List; +import org.apache.lucene.analysis.Analyzer; import org.apache.lucene.analysis.MockAnalyzer; import org.apache.lucene.analysis.MockTokenizer; +import org.apache.lucene.analysis.TokenFilter; +import org.apache.lucene.analysis.TokenStream; +import org.apache.lucene.analysis.tokenattributes.CharTermAttribute; +import org.apache.lucene.analysis.tokenattributes.PayloadAttribute; import org.apache.lucene.document.Document; import org.apache.lucene.document.Field; import org.apache.lucene.index.IndexReader; @@ -64,11 +70,52 @@ public class TestBasics extends LuceneTe private static IndexReader reader; private static Directory directory; + static final class SimplePayloadFilter extends TokenFilter { + String fieldName; + int pos; + final PayloadAttribute payloadAttr; + final CharTermAttribute termAttr; + + public SimplePayloadFilter(TokenStream input, String fieldName) { + super(input); + this.fieldName = fieldName; + pos = 0; + payloadAttr = input.addAttribute(PayloadAttribute.class); + termAttr = input.addAttribute(CharTermAttribute.class); + } + + @Override + public boolean incrementToken() throws IOException { + if (input.incrementToken()) { + payloadAttr.setPayload(new Payload(("pos: " + pos).getBytes())); + pos++; + return true; + } else { + return false; + } + } + + @Override + public void reset() throws IOException { + super.reset(); + pos = 0; + } + } + + static final Analyzer simplePayloadAnalyzer = new Analyzer() { + + @Override + public TokenStream tokenStream(String fieldName, Reader reader) { + return new SimplePayloadFilter(new MockTokenizer(reader, MockTokenizer.SIMPLE, true), fieldName); + } + + }; + @BeforeClass public static void beforeClass() throws Exception { directory = newDirectory(); RandomIndexWriter writer = new RandomIndexWriter(random, directory, - newIndexWriterConfig(TEST_VERSION_CURRENT, new MockAnalyzer(MockTokenizer.SIMPLE, true, true)) + newIndexWriterConfig(TEST_VERSION_CURRENT, simplePayloadAnalyzer) .setMaxBufferedDocs(_TestUtil.nextInt(random, 50, 1000)).setMergePolicy(newLogMergePolicy())); //writer.infoStream = System.out; for (int i = 0; i < 2000; i++) { Modified: lucene/dev/branches/realtime_search/lucene/src/test/org/apache/lucene/search/spans/TestFieldMaskingSpanQuery.java URL: http://svn.apache.org/viewvc/lucene/dev/branches/realtime_search/lucene/src/test/org/apache/lucene/search/spans/TestFieldMaskingSpanQuery.java?rev=1091748&r1=1091747&r2=1091748&view=diff ============================================================================== --- lucene/dev/branches/realtime_search/lucene/src/test/org/apache/lucene/search/spans/TestFieldMaskingSpanQuery.java (original) +++ lucene/dev/branches/realtime_search/lucene/src/test/org/apache/lucene/search/spans/TestFieldMaskingSpanQuery.java Wed Apr 13 11:22:24 2011 @@ -55,7 +55,7 @@ public class TestFieldMaskingSpanQuery e public void setUp() throws Exception { super.setUp(); directory = newDirectory(); - RandomIndexWriter writer= new RandomIndexWriter(random, directory, newIndexWriterConfig(TEST_VERSION_CURRENT, new MockAnalyzer()).setMergePolicy(newLogMergePolicy())); + RandomIndexWriter writer= new RandomIndexWriter(random, directory, newIndexWriterConfig(TEST_VERSION_CURRENT, new MockAnalyzer(random)).setMergePolicy(newLogMergePolicy())); writer.addDocument(doc(new Field[] { field("id", "0") , Modified: lucene/dev/branches/realtime_search/lucene/src/test/org/apache/lucene/search/spans/TestNearSpansOrdered.java URL: http://svn.apache.org/viewvc/lucene/dev/branches/realtime_search/lucene/src/test/org/apache/lucene/search/spans/TestNearSpansOrdered.java?rev=1091748&r1=1091747&r2=1091748&view=diff ============================================================================== --- lucene/dev/branches/realtime_search/lucene/src/test/org/apache/lucene/search/spans/TestNearSpansOrdered.java (original) +++ lucene/dev/branches/realtime_search/lucene/src/test/org/apache/lucene/search/spans/TestNearSpansOrdered.java Wed Apr 13 11:22:24 2011 @@ -43,7 +43,7 @@ public class TestNearSpansOrdered extend public static final String FIELD = "field"; public static final QueryParser qp = - new QueryParser(TEST_VERSION_CURRENT, FIELD, new MockAnalyzer()); + new QueryParser(TEST_VERSION_CURRENT, FIELD, new MockAnalyzer(random)); @Override public void tearDown() throws Exception { @@ -57,7 +57,7 @@ public class TestNearSpansOrdered extend public void setUp() throws Exception { super.setUp(); directory = newDirectory(); - RandomIndexWriter writer= new RandomIndexWriter(random, directory, newIndexWriterConfig(TEST_VERSION_CURRENT, new MockAnalyzer()).setMergePolicy(newLogMergePolicy())); + RandomIndexWriter writer= new RandomIndexWriter(random, directory, newIndexWriterConfig(TEST_VERSION_CURRENT, new MockAnalyzer(random)).setMergePolicy(newLogMergePolicy())); for (int i = 0; i < docFields.length; i++) { Document doc = new Document(); doc.add(newField(FIELD, docFields[i], Field.Store.NO, Field.Index.ANALYZED)); Modified: lucene/dev/branches/realtime_search/lucene/src/test/org/apache/lucene/search/spans/TestSpanFirstQuery.java URL: http://svn.apache.org/viewvc/lucene/dev/branches/realtime_search/lucene/src/test/org/apache/lucene/search/spans/TestSpanFirstQuery.java?rev=1091748&r1=1091747&r2=1091748&view=diff ============================================================================== --- lucene/dev/branches/realtime_search/lucene/src/test/org/apache/lucene/search/spans/TestSpanFirstQuery.java (original) +++ lucene/dev/branches/realtime_search/lucene/src/test/org/apache/lucene/search/spans/TestSpanFirstQuery.java Wed Apr 13 11:22:24 2011 @@ -37,7 +37,7 @@ public class TestSpanFirstQuery extends // mimic StopAnalyzer CharacterRunAutomaton stopSet = new CharacterRunAutomaton(new RegExp("the|a|of").toAutomaton()); - Analyzer analyzer = new MockAnalyzer(MockTokenizer.SIMPLE, true, stopSet, true); + Analyzer analyzer = new MockAnalyzer(random, MockTokenizer.SIMPLE, true, stopSet, true); RandomIndexWriter writer = new RandomIndexWriter(random, dir, analyzer); Document doc = new Document(); Modified: lucene/dev/branches/realtime_search/lucene/src/test/org/apache/lucene/search/spans/TestSpans.java URL: http://svn.apache.org/viewvc/lucene/dev/branches/realtime_search/lucene/src/test/org/apache/lucene/search/spans/TestSpans.java?rev=1091748&r1=1091747&r2=1091748&view=diff ============================================================================== --- lucene/dev/branches/realtime_search/lucene/src/test/org/apache/lucene/search/spans/TestSpans.java (original) +++ lucene/dev/branches/realtime_search/lucene/src/test/org/apache/lucene/search/spans/TestSpans.java Wed Apr 13 11:22:24 2011 @@ -55,7 +55,7 @@ public class TestSpans extends LuceneTes public void setUp() throws Exception { super.setUp(); directory = newDirectory(); - RandomIndexWriter writer= new RandomIndexWriter(random, directory, newIndexWriterConfig(TEST_VERSION_CURRENT, new MockAnalyzer()).setMergePolicy(newLogMergePolicy())); + RandomIndexWriter writer= new RandomIndexWriter(random, directory, newIndexWriterConfig(TEST_VERSION_CURRENT, new MockAnalyzer(random)).setMergePolicy(newLogMergePolicy())); for (int i = 0; i < docFields.length; i++) { Document doc = new Document(); doc.add(newField(field, docFields[i], Field.Store.YES, Field.Index.ANALYZED)); @@ -481,7 +481,7 @@ public class TestSpans extends LuceneTes public void testNPESpanQuery() throws Throwable { final Directory dir = newDirectory(); final IndexWriter writer = new IndexWriter(dir, new IndexWriterConfig( - TEST_VERSION_CURRENT, new MockAnalyzer())); + TEST_VERSION_CURRENT, new MockAnalyzer(random))); // Add documents addDoc(writer, "1", "the big dogs went running to the market"); Modified: lucene/dev/branches/realtime_search/lucene/src/test/org/apache/lucene/search/spans/TestSpansAdvanced.java URL: http://svn.apache.org/viewvc/lucene/dev/branches/realtime_search/lucene/src/test/org/apache/lucene/search/spans/TestSpansAdvanced.java?rev=1091748&r1=1091747&r2=1091748&view=diff ============================================================================== --- lucene/dev/branches/realtime_search/lucene/src/test/org/apache/lucene/search/spans/TestSpansAdvanced.java (original) +++ lucene/dev/branches/realtime_search/lucene/src/test/org/apache/lucene/search/spans/TestSpansAdvanced.java Wed Apr 13 11:22:24 2011 @@ -58,7 +58,7 @@ public class TestSpansAdvanced extends L mDirectory = newDirectory(); final RandomIndexWriter writer = new RandomIndexWriter(random, mDirectory, newIndexWriterConfig(TEST_VERSION_CURRENT, - new MockAnalyzer(MockTokenizer.SIMPLE, true, + new MockAnalyzer(random, MockTokenizer.SIMPLE, true, MockTokenFilter.ENGLISH_STOPSET, true)).setMergePolicy(newLogMergePolicy())); addDocument(writer, "1", "I think it should work."); addDocument(writer, "2", "I think it should work."); Modified: lucene/dev/branches/realtime_search/lucene/src/test/org/apache/lucene/search/spans/TestSpansAdvanced2.java URL: http://svn.apache.org/viewvc/lucene/dev/branches/realtime_search/lucene/src/test/org/apache/lucene/search/spans/TestSpansAdvanced2.java?rev=1091748&r1=1091747&r2=1091748&view=diff ============================================================================== --- lucene/dev/branches/realtime_search/lucene/src/test/org/apache/lucene/search/spans/TestSpansAdvanced2.java (original) +++ lucene/dev/branches/realtime_search/lucene/src/test/org/apache/lucene/search/spans/TestSpansAdvanced2.java Wed Apr 13 11:22:24 2011 @@ -46,7 +46,7 @@ public class TestSpansAdvanced2 extends // create test index final RandomIndexWriter writer = new RandomIndexWriter(random, mDirectory, - newIndexWriterConfig(TEST_VERSION_CURRENT, new MockAnalyzer( + newIndexWriterConfig(TEST_VERSION_CURRENT, new MockAnalyzer(random, MockTokenizer.SIMPLE, true, MockTokenFilter.ENGLISH_STOPSET, true)) .setOpenMode(OpenMode.APPEND).setMergePolicy(newLogMergePolicy())); addDocument(writer, "A", "Should we, could we, would we?"); Modified: lucene/dev/branches/realtime_search/lucene/src/test/org/apache/lucene/store/TestBufferedIndexInput.java URL: http://svn.apache.org/viewvc/lucene/dev/branches/realtime_search/lucene/src/test/org/apache/lucene/store/TestBufferedIndexInput.java?rev=1091748&r1=1091747&r2=1091748&view=diff ============================================================================== --- lucene/dev/branches/realtime_search/lucene/src/test/org/apache/lucene/store/TestBufferedIndexInput.java (original) +++ lucene/dev/branches/realtime_search/lucene/src/test/org/apache/lucene/store/TestBufferedIndexInput.java Wed Apr 13 11:22:24 2011 @@ -245,7 +245,7 @@ public class TestBufferedIndexInput exte try { IndexWriter writer = new IndexWriter( dir, - new IndexWriterConfig(TEST_VERSION_CURRENT, new MockAnalyzer()). + new IndexWriterConfig(TEST_VERSION_CURRENT, new MockAnalyzer(random)). setOpenMode(OpenMode.CREATE). setMergePolicy(newLogMergePolicy(false)) ); Modified: lucene/dev/branches/realtime_search/lucene/src/test/org/apache/lucene/store/TestFileSwitchDirectory.java URL: http://svn.apache.org/viewvc/lucene/dev/branches/realtime_search/lucene/src/test/org/apache/lucene/store/TestFileSwitchDirectory.java?rev=1091748&r1=1091747&r2=1091748&view=diff ============================================================================== --- lucene/dev/branches/realtime_search/lucene/src/test/org/apache/lucene/store/TestFileSwitchDirectory.java (original) +++ lucene/dev/branches/realtime_search/lucene/src/test/org/apache/lucene/store/TestFileSwitchDirectory.java Wed Apr 13 11:22:24 2011 @@ -47,7 +47,7 @@ public class TestFileSwitchDirectory ext FileSwitchDirectory fsd = new FileSwitchDirectory(fileExtensions, primaryDir, secondaryDir, true); IndexWriter writer = new IndexWriter( fsd, - new IndexWriterConfig(TEST_VERSION_CURRENT, new MockAnalyzer()). + new IndexWriterConfig(TEST_VERSION_CURRENT, new MockAnalyzer(random)). setMergePolicy(newLogMergePolicy(false)) ); TestIndexWriterReader.createIndexNoClose(true, "ram", writer); Modified: lucene/dev/branches/realtime_search/lucene/src/test/org/apache/lucene/store/TestLockFactory.java URL: http://svn.apache.org/viewvc/lucene/dev/branches/realtime_search/lucene/src/test/org/apache/lucene/store/TestLockFactory.java?rev=1091748&r1=1091747&r2=1091748&view=diff ============================================================================== --- lucene/dev/branches/realtime_search/lucene/src/test/org/apache/lucene/store/TestLockFactory.java (original) +++ lucene/dev/branches/realtime_search/lucene/src/test/org/apache/lucene/store/TestLockFactory.java Wed Apr 13 11:22:24 2011 @@ -49,7 +49,7 @@ public class TestLockFactory extends Luc // Lock prefix should have been set: assertTrue("lock prefix was not set by the RAMDirectory", lf.lockPrefixSet); - IndexWriter writer = new IndexWriter(dir, new IndexWriterConfig(TEST_VERSION_CURRENT, new MockAnalyzer())); + IndexWriter writer = new IndexWriter(dir, new IndexWriterConfig(TEST_VERSION_CURRENT, new MockAnalyzer(random))); // add 100 documents (so that commit lock is used) for (int i = 0; i < 100; i++) { @@ -81,13 +81,13 @@ public class TestLockFactory extends Luc assertTrue("RAMDirectory.setLockFactory did not take", NoLockFactory.class.isInstance(dir.getLockFactory())); - IndexWriter writer = new IndexWriter(dir, new IndexWriterConfig(TEST_VERSION_CURRENT, new MockAnalyzer())); + IndexWriter writer = new IndexWriter(dir, new IndexWriterConfig(TEST_VERSION_CURRENT, new MockAnalyzer(random))); writer.commit(); // required so the second open succeed // Create a 2nd IndexWriter. This is normally not allowed but it should run through since we're not // using any locks: IndexWriter writer2 = null; try { - writer2 = new IndexWriter(dir, new IndexWriterConfig(TEST_VERSION_CURRENT, new MockAnalyzer()).setOpenMode(OpenMode.APPEND)); + writer2 = new IndexWriter(dir, new IndexWriterConfig(TEST_VERSION_CURRENT, new MockAnalyzer(random)).setOpenMode(OpenMode.APPEND)); } catch (Exception e) { e.printStackTrace(System.out); fail("Should not have hit an IOException with no locking"); @@ -107,12 +107,12 @@ public class TestLockFactory extends Luc assertTrue("RAMDirectory did not use correct LockFactory: got " + dir.getLockFactory(), SingleInstanceLockFactory.class.isInstance(dir.getLockFactory())); - IndexWriter writer = new IndexWriter(dir, new IndexWriterConfig(TEST_VERSION_CURRENT, new MockAnalyzer())); + IndexWriter writer = new IndexWriter(dir, new IndexWriterConfig(TEST_VERSION_CURRENT, new MockAnalyzer(random))); // Create a 2nd IndexWriter. This should fail: IndexWriter writer2 = null; try { - writer2 = new IndexWriter(dir, new IndexWriterConfig(TEST_VERSION_CURRENT, new MockAnalyzer()).setOpenMode(OpenMode.APPEND)); + writer2 = new IndexWriter(dir, new IndexWriterConfig(TEST_VERSION_CURRENT, new MockAnalyzer(random)).setOpenMode(OpenMode.APPEND)); fail("Should have hit an IOException with two IndexWriters on default SingleInstanceLockFactory"); } catch (IOException e) { } @@ -148,7 +148,7 @@ public class TestLockFactory extends Luc Directory dir = newFSDirectory(indexDir, lockFactory); // First create a 1 doc index: - IndexWriter w = new IndexWriter(dir, new IndexWriterConfig(TEST_VERSION_CURRENT, new MockAnalyzer()).setOpenMode(OpenMode.CREATE)); + IndexWriter w = new IndexWriter(dir, new IndexWriterConfig(TEST_VERSION_CURRENT, new MockAnalyzer(random)).setOpenMode(OpenMode.CREATE)); addDoc(w); w.close(); @@ -280,7 +280,7 @@ public class TestLockFactory extends Luc IndexWriter writer = null; for(int i=0;i arc = fst.getFirstArc(new FST.Arc()); s.verifyStateAndBelow(fst, arc, 1); } + + // Make sure raw FST can differentiate between final vs + // non-final end nodes + public void testNonFinalStopNodes() throws Exception { + final PositiveIntOutputs outputs = PositiveIntOutputs.getSingleton(true); + final Long nothing = outputs.getNoOutput(); + final Builder b = new Builder(FST.INPUT_TYPE.BYTE1, 0, 0, true, outputs); + + final FST fst = new FST(FST.INPUT_TYPE.BYTE1, outputs); + + final Builder.UnCompiledNode rootNode = new Builder.UnCompiledNode(b, 0); + + // Add final stop node + { + final Builder.UnCompiledNode node = new Builder.UnCompiledNode(b, 0); + node.isFinal = true; + rootNode.addArc('a', node); + final Builder.CompiledNode frozen = new Builder.CompiledNode(); + frozen.address = fst.addNode(node); + rootNode.arcs[0].nextFinalOutput = outputs.get(17); + rootNode.arcs[0].isFinal = true; + rootNode.arcs[0].output = nothing; + rootNode.arcs[0].target = frozen; + } + + // Add non-final stop node + { + final Builder.UnCompiledNode node = new Builder.UnCompiledNode(b, 0); + rootNode.addArc('b', node); + final Builder.CompiledNode frozen = new Builder.CompiledNode(); + frozen.address = fst.addNode(node); + rootNode.arcs[1].nextFinalOutput = nothing; + rootNode.arcs[1].output = outputs.get(42); + rootNode.arcs[1].target = frozen; + } + + fst.finish(fst.addNode(rootNode)); + + checkStopNodes(fst, outputs); + + // Make sure it still works after save/load: + Directory dir = newDirectory(); + IndexOutput out = dir.createOutput("fst"); + fst.save(out); + out.close(); + + IndexInput in = dir.openInput("fst"); + final FST fst2 = new FST(in, outputs); + checkStopNodes(fst2, outputs); + in.close(); + dir.close(); + } + + private void checkStopNodes(FST fst, PositiveIntOutputs outputs) throws Exception { + final Long nothing = outputs.getNoOutput(); + FST.Arc startArc = fst.getFirstArc(new FST.Arc()); + assertEquals(nothing, startArc.output); + assertEquals(nothing, startArc.nextFinalOutput); + + FST.Arc arc = fst.readFirstTargetArc(startArc, new FST.Arc()); + assertEquals('a', arc.label); + assertEquals(17, arc.nextFinalOutput.longValue()); + assertTrue(arc.isFinal()); + + arc = fst.readNextArc(arc); + assertEquals('b', arc.label); + assertFalse(arc.isFinal()); + assertEquals(42, arc.output.longValue()); + } } Modified: lucene/dev/branches/realtime_search/modules/analysis/common/src/test/org/apache/lucene/analysis/miscellaneous/TestLimitTokenCountAnalyzer.java URL: http://svn.apache.org/viewvc/lucene/dev/branches/realtime_search/modules/analysis/common/src/test/org/apache/lucene/analysis/miscellaneous/TestLimitTokenCountAnalyzer.java?rev=1091748&r1=1091747&r2=1091748&view=diff ============================================================================== --- lucene/dev/branches/realtime_search/modules/analysis/common/src/test/org/apache/lucene/analysis/miscellaneous/TestLimitTokenCountAnalyzer.java (original) +++ lucene/dev/branches/realtime_search/modules/analysis/common/src/test/org/apache/lucene/analysis/miscellaneous/TestLimitTokenCountAnalyzer.java Wed Apr 13 11:22:24 2011 @@ -51,7 +51,7 @@ public class TestLimitTokenCountAnalyzer Directory dir = newDirectory(); IndexWriter writer = new IndexWriter(dir, new IndexWriterConfig( - TEST_VERSION_CURRENT, new LimitTokenCountAnalyzer(new MockAnalyzer(), 100000))); + TEST_VERSION_CURRENT, new LimitTokenCountAnalyzer(new MockAnalyzer(random), 100000))); Document doc = new Document(); StringBuilder b = new StringBuilder(); Modified: lucene/dev/branches/realtime_search/modules/analysis/common/src/test/org/apache/lucene/collation/CollationTestBase.java URL: http://svn.apache.org/viewvc/lucene/dev/branches/realtime_search/modules/analysis/common/src/test/org/apache/lucene/collation/CollationTestBase.java?rev=1091748&r1=1091747&r2=1091748&view=diff ============================================================================== --- lucene/dev/branches/realtime_search/modules/analysis/common/src/test/org/apache/lucene/collation/CollationTestBase.java (original) +++ lucene/dev/branches/realtime_search/modules/analysis/common/src/test/org/apache/lucene/collation/CollationTestBase.java Wed Apr 13 11:22:24 2011 @@ -186,7 +186,7 @@ public abstract class CollationTestBase String dkResult) throws Exception { RAMDirectory indexStore = new RAMDirectory(); IndexWriter writer = new IndexWriter(indexStore, new IndexWriterConfig( - TEST_VERSION_CURRENT, new MockAnalyzer(MockTokenizer.WHITESPACE, false))); + TEST_VERSION_CURRENT, new MockAnalyzer(random, MockTokenizer.WHITESPACE, false))); // document data: // the tracer field is used to determine which document was hit Modified: lucene/dev/branches/realtime_search/modules/benchmark/src/test/org/apache/lucene/benchmark/byTask/TestPerfTasksLogic.java URL: http://svn.apache.org/viewvc/lucene/dev/branches/realtime_search/modules/benchmark/src/test/org/apache/lucene/benchmark/byTask/TestPerfTasksLogic.java?rev=1091748&r1=1091747&r2=1091748&view=diff ============================================================================== --- lucene/dev/branches/realtime_search/modules/benchmark/src/test/org/apache/lucene/benchmark/byTask/TestPerfTasksLogic.java (original) +++ lucene/dev/branches/realtime_search/modules/benchmark/src/test/org/apache/lucene/benchmark/byTask/TestPerfTasksLogic.java Wed Apr 13 11:22:24 2011 @@ -96,7 +96,7 @@ public class TestPerfTasksLogic extends assertTrue("Index does not exist?...!", IndexReader.indexExists(benchmark.getRunData().getDirectory())); // now we should be able to open the index for write. IndexWriter iw = new IndexWriter(benchmark.getRunData().getDirectory(), - new IndexWriterConfig(TEST_VERSION_CURRENT, new MockAnalyzer()) + new IndexWriterConfig(TEST_VERSION_CURRENT, new MockAnalyzer(random)) .setOpenMode(OpenMode.APPEND)); iw.close(); IndexReader ir = IndexReader.open(benchmark.getRunData().getDirectory(), true); @@ -183,7 +183,7 @@ public class TestPerfTasksLogic extends assertTrue("Index does not exist?...!", IndexReader.indexExists(benchmark.getRunData().getDirectory())); // now we should be able to open the index for write. - IndexWriter iw = new IndexWriter(benchmark.getRunData().getDirectory(), new IndexWriterConfig(TEST_VERSION_CURRENT, new MockAnalyzer()).setOpenMode(OpenMode.APPEND)); + IndexWriter iw = new IndexWriter(benchmark.getRunData().getDirectory(), new IndexWriterConfig(TEST_VERSION_CURRENT, new MockAnalyzer(random)).setOpenMode(OpenMode.APPEND)); iw.close(); IndexReader ir = IndexReader.open(benchmark.getRunData().getDirectory(), true); assertEquals("100 docs were added to the index, this is what we expect to find!",100,ir.numDocs()); @@ -222,7 +222,7 @@ public class TestPerfTasksLogic extends assertTrue("Index does not exist?...!", IndexReader.indexExists(benchmark.getRunData().getDirectory())); // now we should be able to open the index for write. - IndexWriter iw = new IndexWriter(benchmark.getRunData().getDirectory(), new IndexWriterConfig(TEST_VERSION_CURRENT, new MockAnalyzer()).setOpenMode(OpenMode.APPEND)); + IndexWriter iw = new IndexWriter(benchmark.getRunData().getDirectory(), new IndexWriterConfig(TEST_VERSION_CURRENT, new MockAnalyzer(random)).setOpenMode(OpenMode.APPEND)); iw.close(); IndexReader ir = IndexReader.open(benchmark.getRunData().getDirectory(), true); assertEquals("1000 docs were added to the index, this is what we expect to find!",1000,ir.numDocs()); @@ -295,7 +295,7 @@ public class TestPerfTasksLogic extends assertEquals("TestSearchTask was supposed to be called!",139,CountingSearchTestTask.numSearches); assertTrue("Index does not exist?...!", IndexReader.indexExists(benchmark.getRunData().getDirectory())); // now we should be able to open the index for write. - IndexWriter iw = new IndexWriter(benchmark.getRunData().getDirectory(), new IndexWriterConfig(TEST_VERSION_CURRENT, new MockAnalyzer()).setOpenMode(OpenMode.APPEND)); + IndexWriter iw = new IndexWriter(benchmark.getRunData().getDirectory(), new IndexWriterConfig(TEST_VERSION_CURRENT, new MockAnalyzer(random)).setOpenMode(OpenMode.APPEND)); iw.close(); IndexReader ir = IndexReader.open(benchmark.getRunData().getDirectory(), true); assertEquals("1 docs were added to the index, this is what we expect to find!",1,ir.numDocs()); @@ -407,7 +407,7 @@ public class TestPerfTasksLogic extends // Index the line docs String algLines2[] = { "# ----- properties ", - "analyzer=org.apache.lucene.analysis.MockAnalyzer", + "analyzer=org.apache.lucene.analysis.core.WhitespaceAnalyzer", "content.source=org.apache.lucene.benchmark.byTask.feeds.LineDocSource", "docs.file=" + lineFile.getAbsolutePath().replace('\\', '/'), "content.source.forever=false", @@ -425,7 +425,7 @@ public class TestPerfTasksLogic extends // now we should be able to open the index for write. IndexWriter iw = new IndexWriter(benchmark.getRunData().getDirectory(), - new IndexWriterConfig(TEST_VERSION_CURRENT, new MockAnalyzer()) + new IndexWriterConfig(TEST_VERSION_CURRENT, new MockAnalyzer(random)) .setOpenMode(OpenMode.APPEND)); iw.close(); @@ -448,7 +448,7 @@ public class TestPerfTasksLogic extends // then build index from the same docs String algLines1[] = { "# ----- properties ", - "analyzer=org.apache.lucene.analysis.MockAnalyzer", + "analyzer=org.apache.lucene.analysis.core.WhitespaceAnalyzer", "content.source=org.apache.lucene.benchmark.byTask.feeds.LineDocSource", "docs.file=" + getReuters20LinesFile(), "# ----- alg ", @@ -1021,18 +1021,18 @@ public class TestPerfTasksLogic extends "two three four", "three four", "three four five", "four five", "four five six", "five six" }); - // MockAnalyzer, default maxShingleSize and outputUnigrams + // WhitespaceAnalyzer, default maxShingleSize and outputUnigrams benchmark = execBenchmark - (getShingleConfig("analyzer:MockAnalyzer")); + (getShingleConfig("analyzer:WhitespaceAnalyzer")); assertEqualShingle(benchmark.getRunData().getAnalyzer(), text, new String[] { "one,two,three,", "one,two,three, four", "four", "four five", "five", "five six", "six" }); - // MockAnalyzer, maxShingleSize=3 and outputUnigrams=false + // WhitespaceAnalyzer, maxShingleSize=3 and outputUnigrams=false benchmark = execBenchmark (getShingleConfig - ("outputUnigrams:false,maxShingleSize:3,analyzer:MockAnalyzer")); + ("outputUnigrams:false,maxShingleSize:3,analyzer:WhitespaceAnalyzer")); assertEqualShingle(benchmark.getRunData().getAnalyzer(), text, new String[] { "one,two,three, four", "one,two,three, four five", Modified: lucene/dev/branches/realtime_search/modules/benchmark/src/test/org/apache/lucene/benchmark/byTask/feeds/DocMakerTest.java URL: http://svn.apache.org/viewvc/lucene/dev/branches/realtime_search/modules/benchmark/src/test/org/apache/lucene/benchmark/byTask/feeds/DocMakerTest.java?rev=1091748&r1=1091747&r2=1091748&view=diff ============================================================================== --- lucene/dev/branches/realtime_search/modules/benchmark/src/test/org/apache/lucene/benchmark/byTask/feeds/DocMakerTest.java (original) +++ lucene/dev/branches/realtime_search/modules/benchmark/src/test/org/apache/lucene/benchmark/byTask/feeds/DocMakerTest.java Wed Apr 13 11:22:24 2011 @@ -21,6 +21,7 @@ import java.io.IOException; import java.util.Properties; import org.apache.lucene.analysis.MockAnalyzer; +import org.apache.lucene.analysis.core.WhitespaceAnalyzer; import org.apache.lucene.benchmark.BenchmarkTestCase; import org.apache.lucene.benchmark.byTask.PerfRunData; import org.apache.lucene.benchmark.byTask.tasks.AddDocTask; @@ -70,7 +71,7 @@ public class DocMakerTest extends Benchm Properties props = new Properties(); // Indexing configuration. - props.setProperty("analyzer", MockAnalyzer.class.getName()); + props.setProperty("analyzer", WhitespaceAnalyzer.class.getName()); props.setProperty("content.source", OneDocSource.class.getName()); props.setProperty("directory", "RAMDirectory"); if (setIndexProps) { @@ -99,7 +100,7 @@ public class DocMakerTest extends Benchm Properties props = new Properties(); // Indexing configuration. - props.setProperty("analyzer", MockAnalyzer.class.getName()); + props.setProperty("analyzer", WhitespaceAnalyzer.class.getName()); props.setProperty("content.source", OneDocSource.class.getName()); props.setProperty("directory", "RAMDirectory"); if (setNormsProp) { Modified: lucene/dev/branches/realtime_search/modules/benchmark/src/test/org/apache/lucene/benchmark/byTask/feeds/LineDocSourceTest.java URL: http://svn.apache.org/viewvc/lucene/dev/branches/realtime_search/modules/benchmark/src/test/org/apache/lucene/benchmark/byTask/feeds/LineDocSourceTest.java?rev=1091748&r1=1091747&r2=1091748&view=diff ============================================================================== --- lucene/dev/branches/realtime_search/modules/benchmark/src/test/org/apache/lucene/benchmark/byTask/feeds/LineDocSourceTest.java (original) +++ lucene/dev/branches/realtime_search/modules/benchmark/src/test/org/apache/lucene/benchmark/byTask/feeds/LineDocSourceTest.java Wed Apr 13 11:22:24 2011 @@ -27,6 +27,7 @@ import java.util.Properties; import org.apache.commons.compress.compressors.CompressorStreamFactory; import org.apache.lucene.analysis.MockAnalyzer; +import org.apache.lucene.analysis.core.WhitespaceAnalyzer; import org.apache.lucene.benchmark.BenchmarkTestCase; import org.apache.lucene.benchmark.byTask.PerfRunData; import org.apache.lucene.benchmark.byTask.feeds.LineDocSource.HeaderLineParser; @@ -121,7 +122,7 @@ public class LineDocSourceTest extends B } // Indexing configuration. - props.setProperty("analyzer", MockAnalyzer.class.getName()); + props.setProperty("analyzer", WhitespaceAnalyzer.class.getName()); props.setProperty("content.source", LineDocSource.class.getName()); props.setProperty("directory", "RAMDirectory"); props.setProperty("doc.stored", "true"); Modified: lucene/dev/branches/realtime_search/solr/CHANGES.txt URL: http://svn.apache.org/viewvc/lucene/dev/branches/realtime_search/solr/CHANGES.txt?rev=1091748&r1=1091747&r2=1091748&view=diff ============================================================================== --- lucene/dev/branches/realtime_search/solr/CHANGES.txt (original) +++ lucene/dev/branches/realtime_search/solr/CHANGES.txt Wed Apr 13 11:22:24 2011 @@ -121,6 +121,8 @@ New Features * SOLR-2338: Add support for using in a schema's fieldType, for customizing scoring on a per-field basis. (hossman, yonik, rmuir) +* SOLR-2335: New 'field("...")' function syntax for refering to complex + field names (containing whitespace or special characters) in functions. Optimizations ---------------------- @@ -246,6 +248,9 @@ Bug Fixes * SOLR-2445: Change the default qt to blank in form.jsp, because there is no "standard" request handler unless you have it in your solrconfig.xml explicitly. (koji) +* SOLR-2455: Prevent double submit of forms in admin interface. + (Jeffrey Chang via uschindler) + Other Changes ---------------------- Modified: lucene/dev/branches/realtime_search/solr/contrib/uima/src/test/resources/solr-uima/conf/solrconfig.xml URL: http://svn.apache.org/viewvc/lucene/dev/branches/realtime_search/solr/contrib/uima/src/test/resources/solr-uima/conf/solrconfig.xml?rev=1091748&r1=1091747&r2=1091748&view=diff ============================================================================== --- lucene/dev/branches/realtime_search/solr/contrib/uima/src/test/resources/solr-uima/conf/solrconfig.xml (original) +++ lucene/dev/branches/realtime_search/solr/contrib/uima/src/test/resources/solr-uima/conf/solrconfig.xml Wed Apr 13 11:22:24 2011 @@ -295,7 +295,7 @@ Modified: lucene/dev/branches/realtime_search/solr/src/java/org/apache/solr/search/QueryParsing.java URL: http://svn.apache.org/viewvc/lucene/dev/branches/realtime_search/solr/src/java/org/apache/solr/search/QueryParsing.java?rev=1091748&r1=1091747&r2=1091748&view=diff ============================================================================== --- lucene/dev/branches/realtime_search/solr/src/java/org/apache/solr/search/QueryParsing.java (original) +++ lucene/dev/branches/realtime_search/solr/src/java/org/apache/solr/search/QueryParsing.java Wed Apr 13 11:22:24 2011 @@ -693,7 +693,8 @@ public class QueryParsing { pos++; while (pos < end) { ch = val.charAt(pos); - if (!Character.isJavaIdentifierPart(ch) && ch != '.' && ch != ':') { +// if (!Character.isJavaIdentifierPart(ch) && ch != '.' && ch != ':') { + if (!Character.isJavaIdentifierPart(ch) && ch != '.') { break; } pos++; Modified: lucene/dev/branches/realtime_search/solr/src/java/org/apache/solr/search/ReturnFields.java URL: http://svn.apache.org/viewvc/lucene/dev/branches/realtime_search/solr/src/java/org/apache/solr/search/ReturnFields.java?rev=1091748&r1=1091747&r2=1091748&view=diff ============================================================================== --- lucene/dev/branches/realtime_search/solr/src/java/org/apache/solr/search/ReturnFields.java (original) +++ lucene/dev/branches/realtime_search/solr/src/java/org/apache/solr/search/ReturnFields.java Wed Apr 13 11:22:24 2011 @@ -90,12 +90,10 @@ public class ReturnFields parseFieldList( new String[]{fl}, req); } } - SolrCore.log.info("fields=" + fields + "\t globs="+globs + "\t transformer="+transformer); } public ReturnFields(String[] fl, SolrQueryRequest req) { parseFieldList(fl, req); - SolrCore.log.info("fields=" + fields + "\t globs="+globs + "\t transformer="+transformer); } private void parseFieldList(String[] fl, SolrQueryRequest req) { @@ -162,7 +160,7 @@ public class ReturnFields char ch = sp.ch(); if (field != null) { - if (sp.opt('=')) { + if (sp.opt(':')) { // this was a key, not a field name key = field; field = null; @@ -180,7 +178,7 @@ public class ReturnFields } if (key != null) { - // we read "key = " + // we read "key : " field = sp.getId(null); ch = sp.ch(); if (field != null && (ch==' ' || ch == ',' || ch==0)) { Modified: lucene/dev/branches/realtime_search/solr/src/java/org/apache/solr/search/SolrIndexSearcher.java URL: http://svn.apache.org/viewvc/lucene/dev/branches/realtime_search/solr/src/java/org/apache/solr/search/SolrIndexSearcher.java?rev=1091748&r1=1091747&r2=1091748&view=diff ============================================================================== --- lucene/dev/branches/realtime_search/solr/src/java/org/apache/solr/search/SolrIndexSearcher.java (original) +++ lucene/dev/branches/realtime_search/solr/src/java/org/apache/solr/search/SolrIndexSearcher.java Wed Apr 13 11:22:24 2011 @@ -1593,14 +1593,12 @@ public class SolrIndexSearcher extends I DocIterator iter = set.iterator(); int base=0; int end=0; - int readerIndex = -1; - - AtomicReaderContext leaf = null; + int readerIndex = 0; - for (int i = 0; i < leafContexts.length; i++) { + while (iter.hasNext()) { int doc = iter.nextDoc(); while (doc>=end) { - leaf = leafContexts[i++]; + AtomicReaderContext leaf = leafContexts[readerIndex++]; base = leaf.docBase; end = base + leaf.reader.maxDoc(); topCollector.setNextReader(leaf); Modified: lucene/dev/branches/realtime_search/solr/src/java/org/apache/solr/search/ValueSourceParser.java URL: http://svn.apache.org/viewvc/lucene/dev/branches/realtime_search/solr/src/java/org/apache/solr/search/ValueSourceParser.java?rev=1091748&r1=1091747&r2=1091748&view=diff ============================================================================== --- lucene/dev/branches/realtime_search/solr/src/java/org/apache/solr/search/ValueSourceParser.java (original) +++ lucene/dev/branches/realtime_search/solr/src/java/org/apache/solr/search/ValueSourceParser.java Wed Apr 13 11:22:24 2011 @@ -335,6 +335,15 @@ public abstract class ValueSourceParser return new StringDistanceFunction(str1, str2, dist); } }); + addParser("field", new ValueSourceParser() { + @Override + public ValueSource parse(FunctionQParser fp) throws ParseException { + + String fieldName = fp.parseArg(); + SchemaField f = fp.getReq().getSchema().getField(fieldName); + return f.getType().getValueSource(f, fp); + } + }); addParser(new DoubleParser("rad") { @Override Modified: lucene/dev/branches/realtime_search/solr/src/java/org/apache/solr/spelling/suggest/Lookup.java URL: http://svn.apache.org/viewvc/lucene/dev/branches/realtime_search/solr/src/java/org/apache/solr/spelling/suggest/Lookup.java?rev=1091748&r1=1091747&r2=1091748&view=diff ============================================================================== --- lucene/dev/branches/realtime_search/solr/src/java/org/apache/solr/spelling/suggest/Lookup.java (original) +++ lucene/dev/branches/realtime_search/solr/src/java/org/apache/solr/spelling/suggest/Lookup.java Wed Apr 13 11:22:24 2011 @@ -17,8 +17,8 @@ public abstract class Lookup { * Result of a lookup. */ public static final class LookupResult implements Comparable { - String key; - float value; + public final String key; + public final float value; public LookupResult(String key, float value) { this.key = key; Modified: lucene/dev/branches/realtime_search/solr/src/test/org/apache/solr/client/solrj/SolrExampleTests.java URL: http://svn.apache.org/viewvc/lucene/dev/branches/realtime_search/solr/src/test/org/apache/solr/client/solrj/SolrExampleTests.java?rev=1091748&r1=1091747&r2=1091748&view=diff ============================================================================== --- lucene/dev/branches/realtime_search/solr/src/test/org/apache/solr/client/solrj/SolrExampleTests.java (original) +++ lucene/dev/branches/realtime_search/solr/src/test/org/apache/solr/client/solrj/SolrExampleTests.java Wed Apr 13 11:22:24 2011 @@ -52,6 +52,7 @@ 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.Ignore; import org.junit.Test; /** @@ -380,7 +381,7 @@ abstract public class SolrExampleTests e } - @Test + @Test @Ignore // TODO: re-enable when new transformer syntax is implemented public void testAugmentFields() throws Exception { SolrServer server = getSolrServer(); @@ -405,7 +406,7 @@ abstract public class SolrExampleTests e SolrQuery query = new SolrQuery(); query.setQuery( "*:*" ); - query.set( CommonParams.FL, "id,price,_docid_,_explain:nl_,score,aaa=_value:aaa_,ten=_value:int:10_" ); + 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 ); Modified: lucene/dev/branches/realtime_search/solr/src/test/org/apache/solr/search/function/TestFunctionQuery.java URL: http://svn.apache.org/viewvc/lucene/dev/branches/realtime_search/solr/src/test/org/apache/solr/search/function/TestFunctionQuery.java?rev=1091748&r1=1091747&r2=1091748&view=diff ============================================================================== --- lucene/dev/branches/realtime_search/solr/src/test/org/apache/solr/search/function/TestFunctionQuery.java (original) +++ lucene/dev/branches/realtime_search/solr/src/test/org/apache/solr/search/function/TestFunctionQuery.java Wed Apr 13 11:22:24 2011 @@ -71,16 +71,14 @@ public class TestFunctionQuery extends S // replace \0 with the field name and create a parseable string public String func(String field, String template) { - StringBuilder sb = new StringBuilder("_val_:\""); + StringBuilder sb = new StringBuilder("{!func}"); for (char ch : template.toCharArray()) { if (ch=='\0') { sb.append(field); continue; } - if (ch=='"') sb.append('\\'); sb.append(ch); } - sb.append('"'); return sb.toString(); } @@ -520,5 +518,38 @@ public class TestFunctionQuery extends S dofunc("atan2(.25,.5)", Math.atan2(.25,.5)); } + /** + * verify that both the field("...") value source parser as well as + * ExternalFileField work with esoteric field names + */ + @Test + public void testExternalFieldValueSourceParser() { + + String field = "CoMpleX \" fieldName _extf"; + String fieldAsFunc = "field(\"CoMpleX \\\" fieldName _extf\")"; + + float[] ids = {100,-4,0,10,25,5,77,23,55,-78,-45,-24,63,78,94,22,34,54321,261,-627}; + + createIndex(null,ids); + + // Unsorted field, largest first + makeExternalFile(field, "54321=543210\n0=-999\n25=250","UTF-8"); + // test identity (straight field value) + singleTest(fieldAsFunc, "\0", 54321, 543210, 0,-999, 25,250, 100, 1); + Object orig = FileFloatSource.onlyForTesting; + singleTest(fieldAsFunc, "log(\0)"); + // make sure the values were cached + assertTrue(orig == FileFloatSource.onlyForTesting); + singleTest(fieldAsFunc, "sqrt(\0)"); + assertTrue(orig == FileFloatSource.onlyForTesting); + + makeExternalFile(fieldAsFunc, "0=1","UTF-8"); + assertU(adoc("id", "10000")); // will get same reader if no index change + assertU(commit()); + singleTest(fieldAsFunc, "sqrt(\0)"); + assertTrue(orig != FileFloatSource.onlyForTesting); + + purgeFieldCache(FieldCache.DEFAULT); // avoid FC insanity + } } Modified: lucene/dev/branches/realtime_search/solr/src/webapp/web/admin/form.jsp URL: http://svn.apache.org/viewvc/lucene/dev/branches/realtime_search/solr/src/webapp/web/admin/form.jsp?rev=1091748&r1=1091747&r2=1091748&view=diff ============================================================================== --- lucene/dev/branches/realtime_search/solr/src/webapp/web/admin/form.jsp (original) +++ lucene/dev/branches/realtime_search/solr/src/webapp/web/admin/form.jsp Wed Apr 13 11:22:24 2011 @@ -121,7 +121,7 @@ - + Modified: lucene/dev/branches/realtime_search/solr/src/webapp/web/admin/index.jsp URL: http://svn.apache.org/viewvc/lucene/dev/branches/realtime_search/solr/src/webapp/web/admin/index.jsp?rev=1091748&r1=1091747&r2=1091748&view=diff ============================================================================== --- lucene/dev/branches/realtime_search/solr/src/webapp/web/admin/index.jsp (original) +++ lucene/dev/branches/realtime_search/solr/src/webapp/web/admin/index.jsp Wed Apr 13 11:22:24 2011 @@ -125,7 +125,7 @@
+ onclick="if (queryForm.q.value.length==0) { alert('no empty queries, please'); return false; } else { queryForm.submit(); return false;} ">