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 2010/03/17 12:47:22 UTC
svn commit: r924238 - in /jackrabbit/trunk/jackrabbit-core/src:
main/java/org/apache/jackrabbit/core/query/lucene/
test/java/org/apache/jackrabbit/core/query/
test/repository/workspaces/indexing-test/
Author: mreutegg
Date: Wed Mar 17 11:47:22 2010
New Revision: 924238
URL: http://svn.apache.org/viewvc?rev=924238&view=rev
Log:
JCR-2575: Incorrect excerpt for index aggregates
Modified:
jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/SearchIndex.java
jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/query/IndexingRuleTest.java
jackrabbit/trunk/jackrabbit-core/src/test/repository/workspaces/indexing-test/indexing-configuration.xml
Modified: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/SearchIndex.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/SearchIndex.java?rev=924238&r1=924237&r2=924238&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/SearchIndex.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/SearchIndex.java Wed Mar 17 11:47:22 2010
@@ -22,6 +22,7 @@ import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
+import java.util.Comparator;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
@@ -1348,6 +1349,18 @@ public class SearchIndex extends Abstrac
doc.add(new Field(FieldNames.AGGREGATED_NODE_UUID, aggregate.getNodeId().toString(), Field.Store.NO, Field.Index.NOT_ANALYZED_NO_NORMS));
}
}
+ // make sure that fulltext fields are aligned properly
+ // first all stored fields, then remaining
+ List<Fieldable> fulltextFields = new ArrayList<Fieldable>();
+ fulltextFields.addAll(removeFields(doc, FieldNames.FULLTEXT));
+ Collections.sort(fulltextFields, new Comparator<Fieldable>() {
+ public int compare(Fieldable o1, Fieldable o2) {
+ return Boolean.valueOf(o2.isStored()).compareTo(o1.isStored());
+ }
+ });
+ for (Fieldable f : fulltextFields) {
+ doc.add(f);
+ }
}
// property includes
PropertyState[] propStates = aggregateRule.getAggregatedPropertyStates(state);
@@ -1397,6 +1410,22 @@ public class SearchIndex extends Abstrac
}
/**
+ * Removes the fields with the given <code>name</code> from the
+ * <code>document</code> and returns them in a collection.
+ *
+ * @param document the document.
+ * @param name the name of the fields to remove.
+ * @return the removed fields.
+ */
+ protected final Collection<Fieldable> removeFields(Document document,
+ String name) {
+ List<Fieldable> fields = new ArrayList<Fieldable>();
+ fields.addAll(Arrays.asList(document.getFieldables(name)));
+ document.removeFields(FieldNames.FULLTEXT);
+ return fields;
+ }
+
+ /**
* Returns the relative path from <code>nodeState</code> to
* <code>propState</code>.
*
Modified: jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/query/IndexingRuleTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/query/IndexingRuleTest.java?rev=924238&r1=924237&r2=924238&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/query/IndexingRuleTest.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/query/IndexingRuleTest.java Wed Mar 17 11:47:22 2010
@@ -21,6 +21,7 @@ import javax.jcr.Node;
import javax.jcr.NodeIterator;
import javax.jcr.Value;
import javax.jcr.query.QueryResult;
+import javax.jcr.query.Row;
import javax.jcr.query.RowIterator;
import java.util.List;
import java.util.ArrayList;
@@ -136,4 +137,51 @@ public class IndexingRuleTest extends Ab
Value excerpt = result.getRows().nextRow().getValue("rep:excerpt(.)");
assertNotNull("No excerpt created", excerpt);
}
+
+ public void testUseInExcerptWithAggregate() throws RepositoryException {
+ Node node = testRootNode.addNode(nodeName1, NT_UNSTRUCTURED);
+ node.setProperty("rule", "excerpt");
+ node.setProperty("title", "Apache Jackrabbit");
+ node.setProperty("text", "Jackrabbit is a JCR implementation");
+ Node aggregated = node.addNode("aggregated-node", NT_UNSTRUCTURED);
+ aggregated.setProperty("rule", "excerpt");
+ aggregated.setProperty("title", "Apache Jackrabbit");
+ aggregated.setProperty("text", "Jackrabbit is a JCR implementation");
+ testRootNode.save();
+
+ String stmt = "/jcr:root" + testRootNode.getPath() +
+ "/*[jcr:contains(., 'jackrabbit')]/rep:excerpt(.)";
+ RowIterator rows = executeQuery(stmt).getRows();
+ assertTrue("No results returned", rows.hasNext());
+ Value excerpt;
+ while (rows.hasNext()) {
+ excerpt = rows.nextRow().getValue("rep:excerpt(.)");
+ assertNotNull("No excerpt created", excerpt);
+ assertTrue("Title must not be present in excerpt",
+ excerpt.getString().indexOf("Apache") == -1);
+ int idx = 0;
+ int numHighlights = 0;
+ for (;;) {
+ idx = excerpt.getString().indexOf("<strong>", idx);
+ if (idx == -1) {
+ break;
+ }
+ numHighlights++;
+ int endIdx = excerpt.getString().indexOf("</strong>", idx);
+ assertEquals("wrong highlight", "Jackrabbit",
+ excerpt.getString().substring(idx + "<strong>".length(), endIdx));
+ idx = endIdx;
+ }
+ assertTrue("Missing highlight", numHighlights > 0);
+ }
+
+ stmt = "/jcr:root" + testRootNode.getPath() +
+ "/*[jcr:contains(., 'apache')]/rep:excerpt(.)";
+ rows = executeQuery(stmt).getRows();
+ assertTrue("No results returned", rows.hasNext());
+ excerpt = rows.nextRow().getValue("rep:excerpt(.)");
+ assertNotNull("No excerpt created", excerpt);
+ assertTrue("Title must not be present in excerpt",
+ excerpt.getString().indexOf("Apache") == -1);
+ }
}
Modified: jackrabbit/trunk/jackrabbit-core/src/test/repository/workspaces/indexing-test/indexing-configuration.xml
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/test/repository/workspaces/indexing-test/indexing-configuration.xml?rev=924238&r1=924237&r2=924238&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/test/repository/workspaces/indexing-test/indexing-configuration.xml (original)
+++ jackrabbit/trunk/jackrabbit-core/src/test/repository/workspaces/indexing-test/indexing-configuration.xml Wed Mar 17 11:47:22 2010
@@ -48,6 +48,7 @@
</aggregate>
<aggregate primaryType="nt:unstructured">
+ <include>aggregated-node</include>
<include-property>child/property</include-property>
</aggregate>