You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jackrabbit.apache.org by mr...@apache.org on 2007/05/16 10:49:14 UTC

svn commit: r538484 - in /jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene: AbstractExcerpt.java NodeIndexer.java

Author: mreutegg
Date: Wed May 16 01:49:13 2007
New Revision: 538484

URL: http://svn.apache.org/viewvc?view=rev&rev=538484
Log:
JCR-920: rep:excerpt() should also work on properties
- make sure query is rewritten

Modified:
    jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/AbstractExcerpt.java
    jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/NodeIndexer.java

Modified: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/AbstractExcerpt.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/AbstractExcerpt.java?view=diff&rev=538484&r1=538483&r2=538484
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/AbstractExcerpt.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/AbstractExcerpt.java Wed May 16 01:49:13 2007
@@ -82,10 +82,7 @@
             throws IOException {
         IndexReader reader = index.getIndexReader();
         try {
-            if (!rewritten) {
-                query = query.rewrite(reader);
-                rewritten = true;
-            }
+            checkRewritten(reader);
             Term idTerm = new Term(FieldNames.UUID, id.getUUID().toString());
             TermDocs tDocs = reader.termDocs(idTerm);
             int docNumber;
@@ -112,6 +109,9 @@
             StringBuffer text = new StringBuffer();
             String separator = "";
             for (int i = 0; i < fields.length; i++) {
+                if (fields[i].stringValue().length() == 0) {
+                    continue;
+                }
                 text.append(separator);
                 text.append(fields[i].stringValue());
                 // this is a hack! in general multiple fields with the same
@@ -155,6 +155,7 @@
      * {@inheritDoc}
      */
     public String highlight(String text) throws IOException {
+        checkRewritten(null);
         return createExcerpt(createTermPositionVector(text),
                 text, 1, (text.length() + 1) * 2);
     }
@@ -196,6 +197,33 @@
             }
         }
         return relevantTerms;
+    }
+
+    /**
+     * Makes sure the {@link #query} is rewritten. If the query is already
+     * rewritten, this method returns immediately.
+     *
+     * @param reader an optional index reader, if none is passed this method
+     *               will retrieve one from the {@link #index} and close it
+     *               again after the rewrite operation.
+     * @throws IOException if an error occurs while the query is rewritten.
+     */
+    private void checkRewritten(IndexReader reader) throws IOException {
+        if (!rewritten) {
+            IndexReader r = reader;
+            if (r == null) {
+                r = index.getIndexReader();
+            }
+            try {
+                query = query.rewrite(r);
+            } finally {
+                // only close reader if this method opened one
+                if (reader == null) {
+                    r.close();
+                }
+            }
+            rewritten = true;
+        }
     }
 
     /**

Modified: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/NodeIndexer.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/NodeIndexer.java?view=diff&rev=538484&r1=538483&r2=538484
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/NodeIndexer.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/NodeIndexer.java Wed May 16 01:49:13 2007
@@ -538,6 +538,9 @@
                                   Object internalValue, boolean tokenized,
                                   boolean includeInNodeIndex, float boost) {
         String stringValue = String.valueOf(internalValue);
+        if (stringValue.length() == 0) {
+            return;
+        }
 
         // simple String
         doc.add(new Field(FieldNames.PROPERTIES,