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

📄 distancesortingtest.java

📁 LuceneInAction配套源码,LuceneInAction是对lucene api的详细讲解及具体应用.此源码即应用例子
💻 JAVA
字号:
package lia.extsearch.sorting;import junit.framework.TestCase;import org.apache.lucene.analysis.WhitespaceAnalyzer;import org.apache.lucene.document.Document;import org.apache.lucene.document.Field;import org.apache.lucene.index.IndexWriter;import org.apache.lucene.index.Term;import org.apache.lucene.search.FieldDoc;import org.apache.lucene.search.Hits;import org.apache.lucene.search.IndexSearcher;import org.apache.lucene.search.Query;import org.apache.lucene.search.ScoreDoc;import org.apache.lucene.search.Sort;import org.apache.lucene.search.SortField;import org.apache.lucene.search.TermQuery;import org.apache.lucene.search.TopFieldDocs;import org.apache.lucene.store.RAMDirectory;import java.io.IOException;import lia.extsearch.sorting.DistanceComparatorSource;public class DistanceSortingTest extends TestCase {  private RAMDirectory directory;  private IndexSearcher searcher;  private Query query;  protected void setUp() throws Exception {    directory = new RAMDirectory();    IndexWriter writer =        new IndexWriter(directory, new WhitespaceAnalyzer(), true);    addPoint(writer, "El Charro", "restaurant", 1, 2);    addPoint(writer, "Cafe Poca Cosa", "restaurant", 5, 9);    addPoint(writer, "Los Betos", "restaurant", 9, 6);    addPoint(writer, "Nico's Taco Shop", "restaurant", 3, 8);    writer.close();    searcher = new IndexSearcher(directory);    query = new TermQuery(new Term("type", "restaurant"));  }  private void addPoint(IndexWriter writer,                        String name, String type, int x, int y)      throws IOException {    Document doc = new Document();    doc.add(Field.Keyword("name", name));    doc.add(Field.Keyword("type", type));    doc.add(Field.Keyword("location", x + "," + y));    writer.addDocument(doc);  }  public void testNearestRestaurantToHome() throws Exception {    Sort sort = new Sort(new SortField("location",        new DistanceComparatorSource(0, 0)));    Hits hits = searcher.search(query, sort);    assertEquals("closest",        "El Charro", hits.doc(0).get("name"));    assertEquals("furthest",        "Los Betos", hits.doc(3).get("name"));  }  public void testNeareastRestaurantToWork() throws Exception {    Sort sort = new Sort(new SortField("location",        new DistanceComparatorSource(10, 10)));    TopFieldDocs docs = searcher.search(query, null, 3, sort);    assertEquals(4, docs.totalHits);    assertEquals(3, docs.scoreDocs.length);    FieldDoc fieldDoc = (FieldDoc) docs.scoreDocs[0];    assertEquals("(10,10) -> (9,6) = sqrt(17)",        new Float(Math.sqrt(17)),        fieldDoc.fields[0]);    Document document = searcher.doc(fieldDoc.doc);    assertEquals("Los Betos", document.get("name"));    //dumpDocs(sort, docs);  }  private void dumpDocs(Sort sort, TopFieldDocs docs)      throws IOException {    System.out.println("Sorted by: " + sort);    ScoreDoc[] scoreDocs = docs.scoreDocs;    for (int i = 0; i < scoreDocs.length; i++) {      FieldDoc fieldDoc = (FieldDoc) scoreDocs[i];      Float distance = (Float) fieldDoc.fields[0];      Document doc = searcher.doc(fieldDoc.doc);      System.out.println("   " + doc.get("name") +          " @ (" + doc.get("location") + ") -> " + distance);    }  }}

⌨️ 快捷键说明

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