Mercurial Hosting > luan
diff lucene/src/luan/modules/lucene/LuceneSearcher.java @ 230:4438cb2e04d0
start lucene
git-svn-id: https://luan-java.googlecode.com/svn/trunk@231 21e917c8-12df-6dd8-5cb6-c86387c605b9
author | fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9> |
---|---|
date | Tue, 30 Sep 2014 20:03:56 +0000 |
parents | |
children | 9ce18106f95a |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lucene/src/luan/modules/lucene/LuceneSearcher.java Tue Sep 30 20:03:56 2014 +0000 @@ -0,0 +1,85 @@ +package luan.modules.lucene; + +import java.io.IOException; +import java.util.Iterator; +import java.util.NoSuchElementException; +import org.apache.lucene.index.IndexReader; +import org.apache.lucene.document.Document; +import org.apache.lucene.search.IndexSearcher; +import org.apache.lucene.search.Query; +import org.apache.lucene.search.TopDocs; +import org.apache.lucene.search.TopFieldDocs; +import org.apache.lucene.search.Sort; +import org.apache.lucene.search.ScoreDoc; +import luan.LuanTable; + + +public final class LuceneSearcher { + private final IndexSearcher searcher; + + LuceneSearcher(IndexReader reader) { + this.searcher = new IndexSearcher(reader); + } + + // call in finally block + public void close() { + try { + searcher.getIndexReader().decRef(); + } catch(IOException e) { + throw new RuntimeException(e); + } + } + + private Document rawDoc(int docID) { + try { + return searcher.doc(docID); + } catch(IOException e) { + throw new RuntimeException(e); + } + } + + public LuanTable doc(int docID) { + return LuceneDocument.toTable(rawDoc(docID)); + } + + public TopDocs search(Query query,int n) { + try { + return searcher.search(query,n); + } catch(IOException e) { + throw new RuntimeException(e); + } + } + + public TopFieldDocs search(Query query,int n,Sort sort) { + try { + return searcher.search(query,n,sort); + } catch(IOException e) { + throw new RuntimeException(e); + } + } + + public Iterable<LuanTable> docs(TopDocs td) { + final ScoreDoc[] scoreDocs = td.scoreDocs; + return new Iterable<LuanTable>() { + public Iterator<LuanTable> iterator() { + return new Iterator<LuanTable>() { + private int i = 0; + + public boolean hasNext() { + return i < scoreDocs.length; + } + + public LuanTable next() { + if( !hasNext() ) + throw new NoSuchElementException(); + return doc(scoreDocs[i++].doc); + } + + public void remove() { + throw new UnsupportedOperationException(); + } + }; + } + }; + } +}