Mercurial Hosting > luan
diff lucene/src/luan/modules/lucene/LuceneSearcher.java @ 544:c5a93767cc5c
lucene overhaul, untested
author | Franklin Schmidt <fschmidt@gmail.com> |
---|---|
date | Fri, 12 Jun 2015 19:11:44 -0600 |
parents | 5d4a78c93383 |
children |
line wrap: on
line diff
--- a/lucene/src/luan/modules/lucene/LuceneSearcher.java Mon Jun 08 01:11:08 2015 -0400 +++ b/lucene/src/luan/modules/lucene/LuceneSearcher.java Fri Jun 12 19:11:44 2015 -0600 @@ -21,7 +21,7 @@ import org.apache.lucene.search.Scorer; import org.apache.lucene.search.MatchAllDocsQuery; import org.apache.lucene.index.AtomicReaderContext; -import org.apache.lucene.queryparser.flexible.core.QueryNodeException; +import sane.lucene.queryparser.ParseException; import luan.Luan; import luan.LuanState; import luan.LuanTable; @@ -30,11 +30,12 @@ import luan.LuanException; import luan.LuanRuntimeException; import luan.LuanMethod; +import luan.modules.Utils; public final class LuceneSearcher { private final LuceneIndex index; - private final IndexSearcher searcher; + final IndexSearcher searcher; LuceneSearcher(LuceneIndex index,IndexReader reader) { this.index = index; @@ -46,10 +47,10 @@ searcher.getIndexReader().decRef(); } - LuanTable doc(LuanState luan,int docID) throws LuanException, IOException { - return index.toTable(luan,searcher.doc(docID)); + private LuanTable doc(LuanState luan,int docID) throws LuanException, IOException { + return LuceneDocument.toTable(luan,searcher.doc(docID)); } - +/* TopDocs search(Query query,int n) throws IOException { return searcher.search(query,n); } @@ -57,7 +58,7 @@ TopFieldDocs search(Query query,int n,Sort sort) throws IOException { return searcher.search(query,n,sort); } - +*/ // luan private static final LuanFunction nothingFn = new LuanFunction() { @@ -78,15 +79,9 @@ } } - @LuanMethod public Object[] search( final LuanState luan, Object queryObj, Object nObj, Sort sort ) throws LuanException, IOException, QueryNodeException { - Query query; - if( queryObj instanceof Query ) { - query = (Query)queryObj; - } else if( queryObj instanceof String ) { - String s = (String)queryObj; - query = index.parse(s); - } else - throw luan.exception("bad argument #1 (string or Query expected, got "+Luan.type(queryObj)+")"); + @LuanMethod public Object[] search( final LuanState luan, String queryStr, Object nObj, String sortStr ) throws LuanException, IOException, ParseException { + Utils.checkNotNull(luan,queryStr); + Query query = index.parseQuery(queryStr); if( nObj instanceof LuanFunction ) { final LuanFunction fn = (LuanFunction)nObj; Collector col = new MyCollector() { @@ -119,6 +114,7 @@ searcher.search(query,thcc); return new Object[]{ nothingFn, 0, thcc.getTotalHits() }; } + Sort sort = sortStr==null ? null : index.parseSort(sortStr); TopDocs td = sort==null ? searcher.search(query,n) : searcher.search(query,n,sort); final ScoreDoc[] scoreDocs = td.scoreDocs; LuanFunction results = new LuanFunction() { @@ -145,7 +141,7 @@ LuanTable table() { LuanTable tbl = new LuanTable(); try { - add( tbl, "search", LuanState.class, Object.class, Object.class, Sort.class ); + add( tbl, "search", LuanState.class, String.class, Object.class, String.class ); } catch(NoSuchMethodException e) { throw new RuntimeException(e); }