[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