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);
 		}