You are viewing a plain text version of this content. The canonical link for it is here.
Posted to oak-commits@jackrabbit.apache.org by ch...@apache.org on 2014/10/31 07:15:18 UTC
svn commit: r1635682 - in /jackrabbit/oak/branches/1.0: ./
oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/
oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/
Author: chetanm
Date: Fri Oct 31 06:15:17 2014
New Revision: 1635682
URL: http://svn.apache.org/r1635682
Log:
OAK-2211 - Use Lucene index on non root node
Merging r1632592
Added:
jackrabbit/oak/branches/1.0/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexLookupTest.java
- copied unchanged from r1632592, jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexLookupTest.java
Modified:
jackrabbit/oak/branches/1.0/ (props changed)
jackrabbit/oak/branches/1.0/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexPlanner.java
jackrabbit/oak/branches/1.0/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexLookup.java
jackrabbit/oak/branches/1.0/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LucenePropertyIndex.java
jackrabbit/oak/branches/1.0/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/LucenePropertyIndexTest.java
Propchange: jackrabbit/oak/branches/1.0/
------------------------------------------------------------------------------
Merged /jackrabbit/oak/trunk:r1632592
Modified: jackrabbit/oak/branches/1.0/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexPlanner.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/branches/1.0/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexPlanner.java?rev=1635682&r1=1635681&r2=1635682&view=diff
==============================================================================
--- jackrabbit/oak/branches/1.0/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexPlanner.java (original)
+++ jackrabbit/oak/branches/1.0/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexPlanner.java Fri Oct 31 06:15:17 2014
@@ -24,6 +24,7 @@ import java.util.List;
import javax.annotation.CheckForNull;
+import org.apache.jackrabbit.oak.commons.PathUtils;
import org.apache.jackrabbit.oak.query.fulltext.FullTextExpression;
import org.apache.jackrabbit.oak.spi.query.Filter;
import org.apache.lucene.index.IndexReader;
@@ -107,12 +108,18 @@ public class IndexPlanner {
.setFulltextIndex(defn.isFullTextEnabled())
.setIncludesNodeData(false) // we should not include node data
.setFilter(filter)
+ .setPathPrefix(getPathPrefix())
.setSortOrder(createSortOrder())
.setDelayed(true) //Lucene is always async
.setAttribute(LuceneIndex.ATTR_INDEX_PATH, indexPath)
.setEstimatedEntryCount(getReader().numDocs());
}
+ private String getPathPrefix() {
+ String parentPath = PathUtils.getAncestorPath(indexPath, 2);
+ return PathUtils.denotesRoot(parentPath) ? "" : parentPath;
+ }
+
private IndexReader getReader() {
return indexNode.getSearcher().getIndexReader();
}
Modified: jackrabbit/oak/branches/1.0/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexLookup.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/branches/1.0/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexLookup.java?rev=1635682&r1=1635681&r2=1635682&view=diff
==============================================================================
--- jackrabbit/oak/branches/1.0/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexLookup.java (original)
+++ jackrabbit/oak/branches/1.0/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexLookup.java Fri Oct 31 06:15:17 2014
@@ -43,7 +43,7 @@ public class LuceneIndexLookup {
* fulltext search
*/
public String getFullTextIndexPath(Filter filter, IndexTracker tracker) {
- Collection<String> indexPaths = collectIndexNodePaths(filter);
+ Collection<String> indexPaths = collectIndexNodePaths(filter, false);
IndexNode indexNode = null;
for (String path : indexPaths) {
try {
@@ -62,23 +62,38 @@ public class LuceneIndexLookup {
}
public Collection<String> collectIndexNodePaths(Filter filter){
+ return collectIndexNodePaths(filter, true);
+ }
+
+ private Collection<String> collectIndexNodePaths(Filter filter, boolean recurse){
Set<String> paths = Sets.newHashSet();
- collectIndexNodePaths(filter.getPath(), paths);
+
+ collectIndexNodePaths(root, "/", paths);
+
+ if (recurse) {
+ StringBuilder sb = new StringBuilder();
+ NodeState nodeState = root;
+ for (String element : PathUtils.elements(filter.getPath())) {
+ nodeState = nodeState.getChildNode(element);
+ collectIndexNodePaths(nodeState,
+ sb.append("/").append(element).toString(),
+ paths);
+ }
+ }
+
return paths;
}
- private void collectIndexNodePaths(String filterPath, Collection<String> paths) {
- //TODO Add support for looking index nodes from non root paths
- NodeState state = root.getChildNode(INDEX_DEFINITIONS_NAME);
+ private static void collectIndexNodePaths(NodeState nodeState, String parentPath, Collection<String> paths) {
+ NodeState state = nodeState.getChildNode(INDEX_DEFINITIONS_NAME);
for (ChildNodeEntry entry : state.getChildNodeEntries()) {
if (isLuceneIndexNode(entry.getNodeState())) {
- paths.add(createIndexNodePath(entry.getName()));
+ paths.add(createIndexNodePath(parentPath, entry.getName()));
}
}
}
- private String createIndexNodePath(String name){
- //TODO getPath would lead to duplicate path constru
- return PathUtils.concat("/", INDEX_DEFINITIONS_NAME, name);
+ private static String createIndexNodePath(String parentPath, String name){
+ return PathUtils.concat(parentPath, INDEX_DEFINITIONS_NAME, name);
}
}
Modified: jackrabbit/oak/branches/1.0/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LucenePropertyIndex.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/branches/1.0/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LucenePropertyIndex.java?rev=1635682&r1=1635681&r2=1635682&view=diff
==============================================================================
--- jackrabbit/oak/branches/1.0/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LucenePropertyIndex.java (original)
+++ jackrabbit/oak/branches/1.0/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LucenePropertyIndex.java Fri Oct 31 06:15:17 2014
@@ -377,7 +377,7 @@ public class LucenePropertyIndex impleme
return !queue.isEmpty();
}
};
- return new LucenePathCursor(itr, settings);
+ return new LucenePathCursor(itr, plan, settings);
}
private IndexNode acquireIndexNode(IndexPlan plan) {
@@ -1147,9 +1147,11 @@ public class LucenePropertyIndex impleme
static class LucenePathCursor implements Cursor {
private final Cursor pathCursor;
+ private final String pathPrefix;
LuceneResultRow currentRow;
- LucenePathCursor(final Iterator<LuceneResultRow> it, QueryEngineSettings settings) {
+ LucenePathCursor(final Iterator<LuceneResultRow> it, final IndexPlan plan, QueryEngineSettings settings) {
+ pathPrefix = plan.getPathPrefix();
Iterator<String> pathIterator = new Iterator<String>() {
@Override
@@ -1190,7 +1192,12 @@ public class LucenePropertyIndex impleme
@Override
public String getPath() {
- return pathRow.getPath();
+ String sub = pathRow.getPath();
+ if (PathUtils.isAbsolute(sub)) {
+ return pathPrefix + sub;
+ } else {
+ return PathUtils.concat(pathPrefix, sub);
+ }
}
@Override
Modified: jackrabbit/oak/branches/1.0/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/LucenePropertyIndexTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/branches/1.0/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/LucenePropertyIndexTest.java?rev=1635682&r1=1635681&r2=1635682&view=diff
==============================================================================
--- jackrabbit/oak/branches/1.0/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/LucenePropertyIndexTest.java (original)
+++ jackrabbit/oak/branches/1.0/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/LucenePropertyIndexTest.java Fri Oct 31 06:15:17 2014
@@ -240,6 +240,21 @@ public class LucenePropertyIndexTest ext
}
@Test
+ public void indexDefinitionBelowRoot() throws Exception {
+ Tree parent = root.getTree("/").addChild("test");
+ Tree idx = createIndex(parent, "test1", of("propa", "propb"));
+ idx.addChild("propa");
+ root.commit();
+
+ Tree test = parent.addChild("test2");
+ test.addChild("a").setProperty("propa", "a");
+ root.commit();
+
+ assertQuery("select [jcr:path] from [nt:base] as s where ISDESCENDANTNODE(s, '/test') and propa = 'a'", asList("/test/test2/a"));
+ }
+
+
+ @Test
public void sortQueriesWithLong() throws Exception {
Tree idx = createIndex("test1", of("foo", "bar"));
Tree propIdx = idx.addChild("foo");
@@ -429,6 +444,10 @@ public class LucenePropertyIndexTest ext
private Tree createIndex(String name, Set<String> propNames) throws CommitFailedException {
Tree index = root.getTree("/");
+ return createIndex(index, name, propNames);
+ }
+
+ private Tree createIndex(Tree index, String name, Set<String> propNames) throws CommitFailedException {
Tree def = index.addChild(INDEX_DEFINITIONS_NAME).addChild(name);
def.setProperty(JcrConstants.JCR_PRIMARYTYPE,
INDEX_DEFINITIONS_NODE_TYPE, Type.NAME);
@@ -437,7 +456,7 @@ public class LucenePropertyIndexTest ext
def.setProperty(LuceneIndexConstants.FULL_TEXT_ENABLED, false);
def.setProperty(PropertyStates.createProperty(LuceneIndexConstants.INCLUDE_PROPERTY_NAMES, propNames, Type.STRINGS));
root.commit();
- return root.getTree("/").getChild(INDEX_DEFINITIONS_NAME).getChild(name);
+ return index.getChild(INDEX_DEFINITIONS_NAME).getChild(name);
}
private static String dt(String date) throws ParseException {