You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@lucene.apache.org by tj...@apache.org on 2004/03/23 16:59:49 UTC

cvs commit: jakarta-lucene/src/test/org/apache/lucene/search TestSort.java

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: lucene-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: lucene-dev-help@jakarta.apache.org