tjones 2004/03/23 07:59:49 Modified: src/test/org/apache/lucene/search TestSort.java Log: fix formatting - every line was ended by two carriage returns and a line feed Revision Changes Path 1.2 +341 -341 jakarta-lucene/src/test/org/apache/lucene/search/TestSort.java Index: TestSort.java =================================================================== RCS file: /home/cvs/jakarta-lucene/src/test/org/apache/lucene/search/TestSort.java,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- TestSort.java 24 Feb 2004 19:34:58 -0000 1.1 +++ TestSort.java 23 Mar 2004 15:59:49 -0000 1.2 @@ -1,341 +1,341 @@ -package org.apache.lucene.search;
- -/** - * Copyright 2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import org.apache.lucene.store.RAMDirectory; -import org.apache.lucene.index.IndexWriter; -import org.apache.lucene.index.Term; -import org.apache.lucene.analysis.SimpleAnalyzer; -import org.apache.lucene.document.Document; -import org.apache.lucene.document.Field; - -import java.rmi.Naming; -import java.rmi.registry.LocateRegistry; -import java.rmi.registry.Registry; -import java.io.IOException; -import java.util.regex.Pattern; - -import junit.framework.TestCase; -import junit.framework.Test; -import junit.framework.TestSuite; -import junit.textui.TestRunner; - -/** - * Unit tests for sorting code. - * - * <p>Created: Feb 17, 2004 4:55:10 PM - * - * @author Tim Jones (Nacimiento Software) - * @since lucene 1.4 - * @version $Id$ - */ - -public class TestSort -extends TestCase { - - private Searcher full; - private Searcher searchX; - private Searcher searchY; - private Query queryX; - private Query queryY; - private Query queryA; - private Sort sort; - - - public TestSort (String name) { - super (name); - } - - public static void main (String[] argv) { - if (argv == null || argv.length < 1) - TestRunner.run (suite()); - else if ("server".equals (argv[0])) { - TestSort test = new TestSort (null); - try { - test.startServer(); - Thread.sleep (500000); - } catch (Exception e) { - System.out.println (e); - e.printStackTrace(); - } - } - } - - public static Test suite() { - return new TestSuite (TestSort.class); - } - - - // document data: - // the tracer field is used to determine which document was hit - // the contents field is used to search and sort by relevance - // the int field to sort by int - // the float field to sort by float - // the string field to sort by string - private String[][] data = new String[][] { - // tracer contents int float string - { "A", "x a", "5", "4f", "c" }, - { "B", "y a", "5", "3.4028235E38", "i" }, - { "C", "x a b c", "2147483647", "1.0", "j" }, - { "D", "y a b c", "-1", "0.0f", "a" }, - { "E", "x a b c d", "5", "2f", "h" }, - { "F", "y a b c d", "2", "3.14159f", "g" }, - { "G", "x a b c d", "3", "-1.0", "f" }, - { "H", "y a b c d", "0", "1.4E-45", "e" }, - { "I", "x a b c d e f", "-2147483648", "1.0e+0", "d" }, - { "J", "y a b c d e f", "4", ".5", "b" }, - }; - - // create an index of all the documents, or just the x, or just the y documents - private Searcher getIndex (boolean even, boolean odd) - throws IOException { - RAMDirectory indexStore = new RAMDirectory (); - IndexWriter writer = new IndexWriter (indexStore, new SimpleAnalyzer(), true); - for (int i=0; i<data.length; ++i) { - if (((i%2)==0 && even) || ((i%2)==1 && odd)) { - Document doc = new Document(); // store, index, token - doc.add (new Field ("tracer", data[i][0], true, false, false)); - doc.add (new Field ("contents", data[i][1], false, true, true)); - doc.add (new Field ("int", data[i][2], false, true, false)); - doc.add (new Field ("float", data[i][3], false, true, false)); - doc.add (new Field ("string", data[i][4], false, true, false)); - writer.addDocument (doc); - } - } - writer.optimize (); - writer.close (); - return new IndexSearcher (indexStore); - } - - private Searcher getFullIndex() - throws IOException { - return getIndex (true, true); - } - - private Searcher getXIndex() - throws IOException { - return getIndex (true, false); - } - - private Searcher getYIndex() - throws IOException { - return getIndex (false, true); - } - - public void setUp() throws Exception { - full = getFullIndex(); - searchX = getXIndex(); - searchY = getYIndex(); - queryX = new TermQuery (new Term ("contents", "x")); - queryY = new TermQuery (new Term ("contents", "y")); - queryA = new TermQuery (new Term ("contents", "a")); - sort = new Sort(); - } - - // test the sorts by score and document number - public void testBuiltInSorts() throws Exception { - sort = new Sort(); - assertMatches (full, queryX, sort, "ACEGI"); - assertMatches (full, queryY, sort, "BDFHJ"); - - sort.setSort(SortField.FIELD_DOC); - assertMatches (full, queryX, sort, "ACEGI"); - assertMatches (full, queryY, sort, "BDFHJ"); - } - - // test sorts where the type of field is specified - public void testTypedSort() throws Exception { - sort.setSort (new SortField[] { new SortField ("int", SortField.INT), SortField.FIELD_DOC }); - assertMatches (full, queryX, sort, "IGAEC"); - assertMatches (full, queryY, sort, "DHFJB"); - - sort.setSort (new SortField[] { new SortField ("float", SortField.FLOAT), SortField.FIELD_DOC }); - assertMatches (full, queryX, sort, "GCIEA"); - assertMatches (full, queryY, sort, "DHJFB"); - - sort.setSort (new SortField[] { new SortField ("string", SortField.STRING), SortField.FIELD_DOC }); - assertMatches (full, queryX, sort, "AIGEC"); - assertMatches (full, queryY, sort, "DJHFB"); - } - - // test sorts where the type of field is determined dynamically - public void testAutoSort() throws Exception { - sort.setSort("int"); - assertMatches (full, queryX, sort, "IGAEC"); - assertMatches (full, queryY, sort, "DHFJB"); - - sort.setSort("float"); - assertMatches (full, queryX, sort, "GCIEA"); - assertMatches (full, queryY, sort, "DHJFB"); - - sort.setSort("string"); - assertMatches (full, queryX, sort, "AIGEC"); - assertMatches (full, queryY, sort, "DJHFB"); - } - - // test sorts in reverse - public void testReverseSort() throws Exception { - sort.setSort (new SortField[] { new SortField (null, SortField.SCORE, true), SortField.FIELD_DOC }); - assertMatches (full, queryX, sort, "IEGCA"); - assertMatches (full, queryY, sort, "JFHDB"); - - sort.setSort (new SortField (null, SortField.DOC, true)); - assertMatches (full, queryX, sort, "IGECA"); - assertMatches (full, queryY, sort, "JHFDB"); - - sort.setSort ("int", true); - assertMatches (full, queryX, sort, "CAEGI"); - assertMatches (full, queryY, sort, "BJFHD"); - - sort.setSort ("float", true); - assertMatches (full, queryX, sort, "AECIG"); - assertMatches (full, queryY, sort, "BFJHD"); - - sort.setSort ("string", true); - assertMatches (full, queryX, sort, "CEGIA"); - assertMatches (full, queryY, sort, "BFHJD"); - } - - // test sorts using a series of fields - public void testSortCombos() throws Exception { - sort.setSort (new String[] {"int","float"}); - assertMatches (full, queryX, sort, "IGEAC"); - - sort.setSort (new SortField[] { new SortField ("int", true), new SortField (null, SortField.DOC, true) }); - assertMatches (full, queryX, sort, "CEAGI"); - - sort.setSort (new String[] {"float","string"}); - assertMatches (full, queryX, sort, "GICEA"); - } - - // test a variety of sorts using more than one searcher - public void testMultiSort() throws Exception { - MultiSearcher searcher = new MultiSearcher (new Searchable[] { searchX, searchY }); - runMultiSorts (searcher); - } - - // test a variety of sorts using a parallel multisearcher - public void testParallelMultiSort() throws Exception { - Searcher searcher = new ParallelMultiSearcher (new Searchable[] { searchX, searchY }); - runMultiSorts (searcher); - } - - // test a variety of sorts using a remote searcher - public void testRemoteSort() throws Exception { - Searchable searcher = getRemote(); - MultiSearcher multi = new MultiSearcher (new Searchable[] { searcher }); - runMultiSorts (multi); - } - - // runs a variety of sorts useful for multisearchers - private void runMultiSorts (Searcher multi) throws Exception { - sort.setSort (SortField.FIELD_DOC); - assertMatchesPattern (multi, queryA, sort, "[AB]{2}[CD]{2}[EF]{2}[GH]{2}[IJ]{2}"); - - sort.setSort (new SortField ("int", SortField.INT)); - assertMatchesPattern (multi, queryA, sort, "IDHFGJ[ABE]{3}C"); - - sort.setSort (new SortField[] {new SortField ("int", SortField.INT), SortField.FIELD_DOC}); - assertMatchesPattern (multi, queryA, sort, "IDHFGJ[AB]{2}EC"); - - sort.setSort ("int"); - assertMatchesPattern (multi, queryA, sort, "IDHFGJ[AB]{2}EC"); - - sort.setSort (new SortField[] {new SortField ("float", SortField.FLOAT), SortField.FIELD_DOC}); - assertMatchesPattern (multi, queryA, sort, "GDHJ[CI]{2}EFAB"); - - sort.setSort ("float"); - assertMatchesPattern (multi, queryA, sort, "GDHJ[CI]{2}EFAB"); - - sort.setSort ("string"); - assertMatches (multi, queryA, sort, "DJAIHGFEBC"); - - sort.setSort ("int", true); - assertMatchesPattern (multi, queryA, sort, "C[AB]{2}EJGFHDI"); - - sort.setSort ("float", true); - assertMatchesPattern (multi, queryA, sort, "BAFE[IC]{2}JHDG"); - - sort.setSort ("string", true); - assertMatches (multi, queryA, sort, "CBEFGHIAJD"); - - sort.setSort (new String[] {"int","float"}); - assertMatches (full, queryA, sort, "IDHFGJEABC"); - - sort.setSort (new String[] {"float","string"}); - assertMatches (full, queryA, sort, "GDHJICEFAB"); - } - - // make sure the documents returned by the search match the expected list - private void assertMatches (Searcher searcher, Query query, Sort sort, String expectedResult) - throws IOException { - Hits result = searcher.search (query, sort); - StringBuffer buff = new StringBuffer(10); - int n = result.length(); - for (int i=0; i<n; ++i) { - Document doc = result.doc(i); - String[] v = doc.getValues("tracer"); - for (int j=0; j<v.length; ++j) { - buff.append (v[j]); - } - } - assertEquals (expectedResult, buff.toString()); - } - - // make sure the documents returned by the search match the expected list pattern - private void assertMatchesPattern (Searcher searcher, Query query, Sort sort, String pattern) - throws IOException { - Hits result = searcher.search (query, sort); - StringBuffer buff = new StringBuffer(10); - int n = result.length(); - for (int i=0; i<n; ++i) { - Document doc = result.doc(i); - String[] v = doc.getValues("tracer"); - for (int j=0; j<v.length; ++j) { - buff.append (v[j]); - } - } - // System.out.println ("matching \""+buff+"\" against pattern \""+pattern+"\""); - assertTrue (Pattern.compile(pattern).matcher(buff.toString()).matches()); - } - - - private Searchable getRemote () throws Exception { - try { - return lookupRemote (); - } catch (Throwable e) { - startServer (); - return lookupRemote (); - } - } - - private Searchable lookupRemote () throws Exception { - return (Searchable) Naming.lookup ("//localhost/SortedSearchable"); - } - - private void startServer () throws Exception { - // construct an index - Searcher local = getFullIndex(); - // local.search (queryA, new Sort()); - - // publish it - Registry reg = LocateRegistry.createRegistry (1099); - RemoteSearchable impl = new RemoteSearchable (local); - Naming.rebind ("//localhost/SortedSearchable", impl); - } - -} \ No newline at end of file +package org.apache.lucene.search; + +/** + * Copyright 2004 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import org.apache.lucene.store.RAMDirectory; +import org.apache.lucene.index.IndexWriter; +import org.apache.lucene.index.Term; +import org.apache.lucene.analysis.SimpleAnalyzer; +import org.apache.lucene.document.Document; +import org.apache.lucene.document.Field; + +import java.rmi.Naming; +import java.rmi.registry.LocateRegistry; +import java.rmi.registry.Registry; +import java.io.IOException; +import java.util.regex.Pattern; + +import junit.framework.TestCase; +import junit.framework.Test; +import junit.framework.TestSuite; +import junit.textui.TestRunner; + +/** + * Unit tests for sorting code. + * + * <p>Created: Feb 17, 2004 4:55:10 PM + * + * @author Tim Jones (Nacimiento Software) + * @since lucene 1.4 + * @version $Id$ + */ + +public class TestSort +extends TestCase { + + private Searcher full; + private Searcher searchX; + private Searcher searchY; + private Query queryX; + private Query queryY; + private Query queryA; + private Sort sort; + + + public TestSort (String name) { + super (name); + } + + public static void main (String[] argv) { + if (argv == null || argv.length < 1) + TestRunner.run (suite()); + else if ("server".equals (argv[0])) { + TestSort test = new TestSort (null); + try { + test.startServer(); + Thread.sleep (500000); + } catch (Exception e) { + System.out.println (e); + e.printStackTrace(); + } + } + } + + public static Test suite() { + return new TestSuite (TestSort.class); + } + + + // document data: + // the tracer field is used to determine which document was hit + // the contents field is used to search and sort by relevance + // the int field to sort by int + // the float field to sort by float + // the string field to sort by string + private String[][] data = new String[][] { + // tracer contents int float string + { "A", "x a", "5", "4f", "c" }, + { "B", "y a", "5", "3.4028235E38", "i" }, + { "C", "x a b c", "2147483647", "1.0", "j" }, + { "D", "y a b c", "-1", "0.0f", "a" }, + { "E", "x a b c d", "5", "2f", "h" }, + { "F", "y a b c d", "2", "3.14159f", "g" }, + { "G", "x a b c d", "3", "-1.0", "f" }, + { "H", "y a b c d", "0", "1.4E-45", "e" }, + { "I", "x a b c d e f", "-2147483648", "1.0e+0", "d" }, + { "J", "y a b c d e f", "4", ".5", "b" }, + }; + + // create an index of all the documents, or just the x, or just the y documents + private Searcher getIndex (boolean even, boolean odd) + throws IOException { + RAMDirectory indexStore = new RAMDirectory (); + IndexWriter writer = new IndexWriter (indexStore, new SimpleAnalyzer(), true); + for (int i=0; i<data.length; ++i) { + if (((i%2)==0 && even) || ((i%2)==1 && odd)) { + Document doc = new Document(); // store, index, token + doc.add (new Field ("tracer", data[i][0], true, false, false)); + doc.add (new Field ("contents", data[i][1], false, true, true)); + doc.add (new Field ("int", data[i][2], false, true, false)); + doc.add (new Field ("float", data[i][3], false, true, false)); + doc.add (new Field ("string", data[i][4], false, true, false)); + writer.addDocument (doc); + } + } + writer.optimize (); + writer.close (); + return new IndexSearcher (indexStore); + } + + private Searcher getFullIndex() + throws IOException { + return getIndex (true, true); + } + + private Searcher getXIndex() + throws IOException { + return getIndex (true, false); + } + + private Searcher getYIndex() + throws IOException { + return getIndex (false, true); + } + + public void setUp() throws Exception { + full = getFullIndex(); + searchX = getXIndex(); + searchY = getYIndex(); + queryX = new TermQuery (new Term ("contents", "x")); + queryY = new TermQuery (new Term ("contents", "y")); + queryA = new TermQuery (new Term ("contents", "a")); + sort = new Sort(); + } + + // test the sorts by score and document number + public void testBuiltInSorts() throws Exception { + sort = new Sort(); + assertMatches (full, queryX, sort, "ACEGI"); + assertMatches (full, queryY, sort, "BDFHJ"); + + sort.setSort(SortField.FIELD_DOC); + assertMatches (full, queryX, sort, "ACEGI"); + assertMatches (full, queryY, sort, "BDFHJ"); + } + + // test sorts where the type of field is specified + public void testTypedSort() throws Exception { + sort.setSort (new SortField[] { new SortField ("int", SortField.INT), SortField.FIELD_DOC }); + assertMatches (full, queryX, sort, "IGAEC"); + assertMatches (full, queryY, sort, "DHFJB"); + + sort.setSort (new SortField[] { new SortField ("float", SortField.FLOAT), SortField.FIELD_DOC }); + assertMatches (full, queryX, sort, "GCIEA"); + assertMatches (full, queryY, sort, "DHJFB"); + + sort.setSort (new SortField[] { new SortField ("string", SortField.STRING), SortField.FIELD_DOC }); + assertMatches (full, queryX, sort, "AIGEC"); + assertMatches (full, queryY, sort, "DJHFB"); + } + + // test sorts where the type of field is determined dynamically + public void testAutoSort() throws Exception { + sort.setSort("int"); + assertMatches (full, queryX, sort, "IGAEC"); + assertMatches (full, queryY, sort, "DHFJB"); + + sort.setSort("float"); + assertMatches (full, queryX, sort, "GCIEA"); + assertMatches (full, queryY, sort, "DHJFB"); + + sort.setSort("string"); + assertMatches (full, queryX, sort, "AIGEC"); + assertMatches (full, queryY, sort, "DJHFB"); + } + + // test sorts in reverse + public void testReverseSort() throws Exception { + sort.setSort (new SortField[] { new SortField (null, SortField.SCORE, true), SortField.FIELD_DOC }); + assertMatches (full, queryX, sort, "IEGCA"); + assertMatches (full, queryY, sort, "JFHDB"); + + sort.setSort (new SortField (null, SortField.DOC, true)); + assertMatches (full, queryX, sort, "IGECA"); + assertMatches (full, queryY, sort, "JHFDB"); + + sort.setSort ("int", true); + assertMatches (full, queryX, sort, "CAEGI"); + assertMatches (full, queryY, sort, "BJFHD"); + + sort.setSort ("float", true); + assertMatches (full, queryX, sort, "AECIG"); + assertMatches (full, queryY, sort, "BFJHD"); + + sort.setSort ("string", true); + assertMatches (full, queryX, sort, "CEGIA"); + assertMatches (full, queryY, sort, "BFHJD"); + } + + // test sorts using a series of fields + public void testSortCombos() throws Exception { + sort.setSort (new String[] {"int","float"}); + assertMatches (full, queryX, sort, "IGEAC"); + + sort.setSort (new SortField[] { new SortField ("int", true), new SortField (null, SortField.DOC, true) }); + assertMatches (full, queryX, sort, "CEAGI"); + + sort.setSort (new String[] {"float","string"}); + assertMatches (full, queryX, sort, "GICEA"); + } + + // test a variety of sorts using more than one searcher + public void testMultiSort() throws Exception { + MultiSearcher searcher = new MultiSearcher (new Searchable[] { searchX, searchY }); + runMultiSorts (searcher); + } + + // test a variety of sorts using a parallel multisearcher + public void testParallelMultiSort() throws Exception { + Searcher searcher = new ParallelMultiSearcher (new Searchable[] { searchX, searchY }); + runMultiSorts (searcher); + } + + // test a variety of sorts using a remote searcher + public void testRemoteSort() throws Exception { + Searchable searcher = getRemote(); + MultiSearcher multi = new MultiSearcher (new Searchable[] { searcher }); + runMultiSorts (multi); + } + + // runs a variety of sorts useful for multisearchers + private void runMultiSorts (Searcher multi) throws Exception { + sort.setSort (SortField.FIELD_DOC); + assertMatchesPattern (multi, queryA, sort, "[AB]{2}[CD]{2}[EF]{2}[GH]{2}[IJ]{2}"); + + sort.setSort (new SortField ("int", SortField.INT)); + assertMatchesPattern (multi, queryA, sort, "IDHFGJ[ABE]{3}C"); + + sort.setSort (new SortField[] {new SortField ("int", SortField.INT), SortField.FIELD_DOC}); + assertMatchesPattern (multi, queryA, sort, "IDHFGJ[AB]{2}EC"); + + sort.setSort ("int"); + assertMatchesPattern (multi, queryA, sort, "IDHFGJ[AB]{2}EC"); + + sort.setSort (new SortField[] {new SortField ("float", SortField.FLOAT), SortField.FIELD_DOC}); + assertMatchesPattern (multi, queryA, sort, "GDHJ[CI]{2}EFAB"); + + sort.setSort ("float"); + assertMatchesPattern (multi, queryA, sort, "GDHJ[CI]{2}EFAB"); + + sort.setSort ("string"); + assertMatches (multi, queryA, sort, "DJAIHGFEBC"); + + sort.setSort ("int", true); + assertMatchesPattern (multi, queryA, sort, "C[AB]{2}EJGFHDI"); + + sort.setSort ("float", true); + assertMatchesPattern (multi, queryA, sort, "BAFE[IC]{2}JHDG"); + + sort.setSort ("string", true); + assertMatches (multi, queryA, sort, "CBEFGHIAJD"); + + sort.setSort (new String[] {"int","float"}); + assertMatches (full, queryA, sort, "IDHFGJEABC"); + + sort.setSort (new String[] {"float","string"}); + assertMatches (full, queryA, sort, "GDHJICEFAB"); + } + + // make sure the documents returned by the search match the expected list + private void assertMatches (Searcher searcher, Query query, Sort sort, String expectedResult) + throws IOException { + Hits result = searcher.search (query, sort); + StringBuffer buff = new StringBuffer(10); + int n = result.length(); + for (int i=0; i<n; ++i) { + Document doc = result.doc(i); + String[] v = doc.getValues("tracer"); + for (int j=0; j<v.length; ++j) { + buff.append (v[j]); + } + } + assertEquals (expectedResult, buff.toString()); + } + + // make sure the documents returned by the search match the expected list pattern + private void assertMatchesPattern (Searcher searcher, Query query, Sort sort, String pattern) + throws IOException { + Hits result = searcher.search (query, sort); + StringBuffer buff = new StringBuffer(10); + int n = result.length(); + for (int i=0; i<n; ++i) { + Document doc = result.doc(i); + String[] v = doc.getValues("tracer"); + for (int j=0; j<v.length; ++j) { + buff.append (v[j]); + } + } + // System.out.println ("matching \""+buff+"\" against pattern \""+pattern+"\""); + assertTrue (Pattern.compile(pattern).matcher(buff.toString()).matches()); + } + + + private Searchable getRemote () throws Exception { + try { + return lookupRemote (); + } catch (Throwable e) { + startServer (); + return lookupRemote (); + } + } + + private Searchable lookupRemote () throws Exception { + return (Searchable) Naming.lookup ("//localhost/SortedSearchable"); + } + + private void startServer () throws Exception { + // construct an index + Searcher local = getFullIndex(); + // local.search (queryA, new Sort()); + + // publish it + Registry reg = LocateRegistry.createRegistry (1099); + RemoteSearchable impl = new RemoteSearchable (local); + Naming.rebind ("//localhost/SortedSearchable", impl); + } + +} --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]