[Mulgara-svn] r1450 - trunk/src/jar/resolver-lucene/java/org/mulgara/resolver/lucene
ronald at mulgara.org
ronald at mulgara.org
Thu Jan 22 11:17:03 UTC 2009
Author: ronald
Date: 2009-01-22 03:17:02 -0800 (Thu, 22 Jan 2009)
New Revision: 1450
Modified:
trunk/src/jar/resolver-lucene/java/org/mulgara/resolver/lucene/FullTextStringIndex.java
trunk/src/jar/resolver-lucene/java/org/mulgara/resolver/lucene/FullTextStringIndexTuples.java
trunk/src/jar/resolver-lucene/java/org/mulgara/resolver/lucene/FullTextStringIndexUnitTest.java
Log:
Don't load fields in the lucene result Documents that won't be needed, i.e.
all fields that were not variables in the constraint. This halves the query
time in some cases.
Modified: trunk/src/jar/resolver-lucene/java/org/mulgara/resolver/lucene/FullTextStringIndex.java
===================================================================
--- trunk/src/jar/resolver-lucene/java/org/mulgara/resolver/lucene/FullTextStringIndex.java 2009-01-22 05:14:21 UTC (rev 1449)
+++ trunk/src/jar/resolver-lucene/java/org/mulgara/resolver/lucene/FullTextStringIndex.java 2009-01-22 11:17:02 UTC (rev 1450)
@@ -41,6 +41,7 @@
import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.document.Document;
import org.apache.lucene.document.Field;
+import org.apache.lucene.document.FieldSelector;
import org.apache.lucene.index.IndexReader;
import org.apache.lucene.index.IndexWriter;
import org.apache.lucene.index.Term;
@@ -809,8 +810,8 @@
return hits.size();
}
- public final Document doc(int n) throws IOException {
- return reader.document(hits.get(n).doc);
+ public final Document doc(int n, FieldSelector fs) throws IOException {
+ return reader.document(hits.get(n).doc, fs);
}
public final float score(int n) throws IOException {
Modified: trunk/src/jar/resolver-lucene/java/org/mulgara/resolver/lucene/FullTextStringIndexTuples.java
===================================================================
--- trunk/src/jar/resolver-lucene/java/org/mulgara/resolver/lucene/FullTextStringIndexTuples.java 2009-01-22 05:14:21 UTC (rev 1449)
+++ trunk/src/jar/resolver-lucene/java/org/mulgara/resolver/lucene/FullTextStringIndexTuples.java 2009-01-22 11:17:02 UTC (rev 1450)
@@ -39,6 +39,8 @@
// Third party packages
import org.apache.log4j.Logger;
import org.apache.lucene.document.Document;
+import org.apache.lucene.document.FieldSelector;
+import org.apache.lucene.document.FieldSelectorResult;
// JRDf
import org.jrdf.graph.BlankNode;
@@ -91,6 +93,9 @@
/** The native Lucene query result to represent as a {@link Tuples}. */
private FullTextStringIndex.Hits hits;
+ /** Which fields to load from the documents. */
+ private FieldSelector fieldSelector;
+
/**
* The current document within the {@link #hits}.
*
@@ -190,9 +195,9 @@
//
public void beforeFirst(long[] prefix, int suffixTruncation) throws TuplesException {
- String subject = getString(subjectElement, prefix);
- String predicate = getString(predicateElement, prefix);
- String object = getString(objectElement, prefix);
+ final String subject = getString(subjectElement, prefix);
+ final String predicate = getString(predicateElement, prefix);
+ final String object = getString(objectElement, prefix);
assert (constraint.getScoreVar() == null || object != null) :
"Internal error: lucene-query string not bound even though a score is requested";
@@ -207,7 +212,18 @@
"', predicate='" + predicate + "', object='" + object + "'", e);
}
- //Tuples tuples = TuplesOperations.sort(tmpTuples);
+ fieldSelector = new FieldSelector() {
+ public FieldSelectorResult accept(String fieldName) {
+ if (fieldName.equals(FullTextStringIndex.SUBJECT_KEY) && subject == null ||
+ fieldName.equals(FullTextStringIndex.PREDICATE_KEY) && predicate == null ||
+ (fieldName.equals(FullTextStringIndex.LITERAL_KEY) ||
+ fieldName.equals(FullTextStringIndex.REVERSE_LITERAL_KEY)) && object == null) {
+ return FieldSelectorResult.LOAD;
+ } else {
+ return FieldSelectorResult.NO_LOAD;
+ }
+ }
+ };
document = null;
nextDocumentIndex = 0;
@@ -342,7 +358,7 @@
try {
if (nextDocumentIndex < getRowCount()) {
- document = hits.doc(nextDocumentIndex++);
+ document = hits.doc(nextDocumentIndex++, fieldSelector);
return true;
} else {
document = null;
Modified: trunk/src/jar/resolver-lucene/java/org/mulgara/resolver/lucene/FullTextStringIndexUnitTest.java
===================================================================
--- trunk/src/jar/resolver-lucene/java/org/mulgara/resolver/lucene/FullTextStringIndexUnitTest.java 2009-01-22 05:14:21 UTC (rev 1449)
+++ trunk/src/jar/resolver-lucene/java/org/mulgara/resolver/lucene/FullTextStringIndexUnitTest.java 2009-01-22 11:17:02 UTC (rev 1450)
@@ -496,7 +496,7 @@
int docsRemoved = 0;
for (int docNo = 0; docNo < hits.length(); docNo++) {
- String uri = hits.doc(docNo).getField(FullTextStringIndex.SUBJECT_KEY).stringValue();
+ String uri = hits.doc(docNo, null).getField(FullTextStringIndex.SUBJECT_KEY).stringValue();
logger.debug("Found supernatural in :" + uri);
More information about the Mulgara-svn
mailing list