⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 testsort.java

📁 索引aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
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.*;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.io.Serializable;import java.util.regex.Pattern;import java.util.HashMap;import java.util.Iterator;import java.util.Locale;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: TestSort.java,v 1.7 2004/05/24 22:51:42 tjones Exp $ */public class TestSortextends TestCaseimplements Serializable {	private Searcher full;	private Searcher searchX;	private Searcher searchY;	private Query queryX;	private Query queryY;	private Query queryA;	private Query queryF;	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   custom	{   "A",   "x a",           "5",           "4f",           "c",     "A-3"   },	{   "B",   "y a",           "5",           "3.4028235E38", "i",     "B-10"  },	{   "C",   "x a b c",       "2147483647",  "1.0",          "j",     "A-2"   },	{   "D",   "y a b c",       "-1",          "0.0f",         "a",     "C-0"   },	{   "E",   "x a b c d",     "5",           "2f",           "h",     "B-8"   },	{   "F",   "y a b c d",     "2",           "3.14159f",     "g",     "B-1"   },	{   "G",   "x a b c d",     "3",           "-1.0",         "f",     "C-100" },	{   "H",   "y a b c d",     "0",           "1.4E-45",      "e",     "C-88"  },	{   "I",   "x a b c d e f", "-2147483648", "1.0e+0",       "d",     "A-10"  },	{   "J",   "y a b c d e f", "4",           ".5",           "b",     "C-7"   },	{   "Z",   "f",             null,          null,           null,    null    }	};	// 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));				if (data[i][2] != null) doc.add (new Field ("int",      data[i][2], false, true, false));				if (data[i][3] != null) doc.add (new Field ("float",    data[i][3], false, true, false));				if (data[i][4] != null) doc.add (new Field ("string",   data[i][4], false, true, false));				if (data[i][5] != null) doc.add (new Field ("custom",   data[i][5], 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);	}	private Searcher getEmptyIndex()	throws IOException {		return getIndex (false, false);	}	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"));		queryF = new TermQuery (new Term ("contents", "f"));		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 when there's nothing in the index	public void testEmptyIndex() throws Exception {		Searcher empty = getEmptyIndex();		sort = new Sort();		assertMatches (empty, queryX, sort, "");		sort.setSort(SortField.FIELD_DOC);		assertMatches (empty, queryX, sort, "");		sort.setSort (new SortField[] { new SortField ("int", SortField.INT), SortField.FIELD_DOC });		assertMatches (empty, queryX, sort, "");		sort.setSort (new SortField[] { new SortField ("string", SortField.STRING, true), SortField.FIELD_DOC });		assertMatches (empty, queryX, sort, "");		sort.setSort (new SortField[] { new SortField ("float", SortField.FLOAT), new SortField ("string", SortField.STRING) });		assertMatches (empty, queryX, sort, "");	}	// 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 sorting when the sort field is empty (undefined) for some of the documents	public void testEmptyFieldSort() throws Exception {		sort.setSort ("string");		assertMatches (full, queryF, sort, "ZJI");		sort.setSort ("string", true);		assertMatches (full, queryF, sort, "IJZ");		sort.setSort ("int");		assertMatches (full, queryF, sort, "IZJ");		sort.setSort ("int", true);		assertMatches (full, queryF, sort, "JZI");		sort.setSort ("float");		assertMatches (full, queryF, sort, "ZJI");		sort.setSort ("float", true);		assertMatches (full, queryF, sort, "IJZ");	}	// 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 using a Locale for sorting strings	public void testLocaleSort() throws Exception {		sort.setSort (new SortField[] { new SortField ("string", Locale.US) });		assertMatches (full, queryX, sort, "AIGEC");		assertMatches (full, queryY, sort, "DJHFB");		sort.setSort (new SortField[] { new SortField ("string", Locale.US, true) });		assertMatches (full, queryX, sort, "CEGIA");		assertMatches (full, queryY, sort, "BFHJD");	}	// test a custom sort function	public void testCustomSorts() throws Exception {		sort.setSort (new SortField ("custom", SampleComparable.getComparatorSource()));		assertMatches (full, queryX, sort, "CAIEG");		sort.setSort (new SortField ("custom", SampleComparable.getComparatorSource(), true));		assertMatches (full, queryY, sort, "HJDBF");

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -