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 al...@apache.org on 2014/04/16 22:48:39 UTC
svn commit: r1588067 - in /jackrabbit/oak/branches/1.0: ./
oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndex.java
oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexEditor.java
Author: alexparvulescu
Date: Wed Apr 16 20:48:39 2014
New Revision: 1588067
URL: http://svn.apache.org/r1588067
Log:
OAK-1740 Add a custom Lucene field visitor for the path
- merged to 1.0
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/LuceneIndex.java
jackrabbit/oak/branches/1.0/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexEditor.java
Propchange: jackrabbit/oak/branches/1.0/
------------------------------------------------------------------------------
Merged /jackrabbit/oak/trunk:r1588066
Modified: jackrabbit/oak/branches/1.0/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndex.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/branches/1.0/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndex.java?rev=1588067&r1=1588066&r2=1588067&view=diff
==============================================================================
--- jackrabbit/oak/branches/1.0/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndex.java (original)
+++ jackrabbit/oak/branches/1.0/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndex.java Wed Apr 16 20:48:39 2014
@@ -26,7 +26,6 @@ import static org.apache.jackrabbit.oak.
import static org.apache.jackrabbit.oak.commons.PathUtils.getName;
import static org.apache.jackrabbit.oak.commons.PathUtils.getParentPath;
import static org.apache.jackrabbit.oak.plugins.index.lucene.FieldNames.PATH;
-import static org.apache.jackrabbit.oak.plugins.index.lucene.FieldNames.PATH_SELECTOR;
import static org.apache.jackrabbit.oak.plugins.index.lucene.LuceneIndexConstants.EXCLUDE_PROPERTY_NAMES;
import static org.apache.jackrabbit.oak.plugins.index.lucene.LuceneIndexConstants.INCLUDE_PROPERTY_TYPES;
import static org.apache.jackrabbit.oak.plugins.index.lucene.LuceneIndexConstants.VERSION;
@@ -55,6 +54,7 @@ import javax.jcr.PropertyType;
import com.google.common.collect.AbstractIterator;
import com.google.common.collect.Queues;
import com.google.common.collect.Sets;
+
import org.apache.jackrabbit.oak.api.PropertyValue;
import org.apache.jackrabbit.oak.plugins.index.aggregate.NodeAggregator;
import org.apache.jackrabbit.oak.plugins.index.lucene.util.MoreLikeThisHelper;
@@ -78,8 +78,10 @@ import org.apache.lucene.analysis.Analyz
import org.apache.lucene.analysis.TokenStream;
import org.apache.lucene.analysis.tokenattributes.CharTermAttribute;
import org.apache.lucene.analysis.tokenattributes.OffsetAttribute;
+import org.apache.lucene.index.FieldInfo;
import org.apache.lucene.index.IndexReader;
import org.apache.lucene.index.MultiFields;
+import org.apache.lucene.index.StoredFieldVisitor;
import org.apache.lucene.index.Term;
import org.apache.lucene.index.Terms;
import org.apache.lucene.index.TermsEnum;
@@ -302,8 +304,10 @@ public class LuceneIndex implements Full
}
private LuceneResultRow convertToRow(ScoreDoc doc, IndexSearcher searcher) throws IOException {
- String path = searcher.getIndexReader().document(doc.doc,
- PATH_SELECTOR).get(PATH);
+ IndexReader reader = searcher.getIndexReader();
+ PathStoredFieldVisitor visitor = new PathStoredFieldVisitor();
+ reader.document(doc.doc, visitor);
+ String path = visitor.getPath();
if (path != null) {
if ("".equals(path)) {
path = "/";
@@ -964,7 +968,33 @@ public class LuceneIndex implements Full
};
}
-
+ }
+
+ private static class PathStoredFieldVisitor extends StoredFieldVisitor {
+
+ private String path;
+ private boolean pathVisited;
+
+ @Override
+ public Status needsField(FieldInfo fieldInfo) throws IOException {
+ if (PATH.equals(fieldInfo.name)) {
+ return Status.YES;
+ }
+ return pathVisited ? Status.STOP : Status.NO;
+ }
+
+ @Override
+ public void stringField(FieldInfo fieldInfo, String value)
+ throws IOException {
+ if (PATH.equals(fieldInfo.name)) {
+ path = value;
+ pathVisited = true;
+ }
+ }
+
+ public String getPath() {
+ return path;
+ }
}
}
Modified: jackrabbit/oak/branches/1.0/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexEditor.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/branches/1.0/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexEditor.java?rev=1588067&r1=1588066&r2=1588067&view=diff
==============================================================================
--- jackrabbit/oak/branches/1.0/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexEditor.java (original)
+++ jackrabbit/oak/branches/1.0/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexEditor.java Wed Apr 16 20:48:39 2014
@@ -27,6 +27,8 @@ import static org.apache.jackrabbit.oak.
import java.io.IOException;
import java.io.InputStream;
+import java.util.ArrayList;
+import java.util.List;
import org.apache.jackrabbit.JcrConstants;
import org.apache.jackrabbit.oak.api.Blob;
@@ -40,6 +42,7 @@ import org.apache.jackrabbit.oak.spi.sta
import org.apache.jackrabbit.oak.spi.state.NodeState;
import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.document.Document;
+import org.apache.lucene.document.Field;
import org.apache.lucene.index.IndexWriter;
import org.apache.lucene.search.PrefixQuery;
import org.apache.tika.metadata.Metadata;
@@ -188,7 +191,7 @@ public class LuceneIndexEditor implement
}
private Document makeDocument(String path, NodeState state, boolean isUpdate) throws CommitFailedException {
- Document document = new Document();
+ List<Field> fields = new ArrayList<Field>();
boolean dirty = false;
for (PropertyState property : state.getProperties()) {
String pname = property.getName();
@@ -197,15 +200,15 @@ public class LuceneIndexEditor implement
.tag())) != 0 && context.includeProperty(pname)) {
if (Type.BINARY.tag() == property.getType().tag()) {
this.context.indexUpdate();
- addBinaryValue(document, property, state);
+ fields.addAll(newBinary(property, state));
dirty = true;
} else {
for (String value : property.getValue(Type.STRINGS)) {
this.context.indexUpdate();
- document.add(newPropertyField(pname, value,
+ fields.add(newPropertyField(pname, value,
!skipTokenization(pname),
context.isStored(pname)));
- document.add(newFulltextField(value));
+ fields.add(newFulltextField(value));
dirty = true;
}
}
@@ -216,11 +219,15 @@ public class LuceneIndexEditor implement
// updated the state but had no relevant changes
return null;
}
+ Document document = new Document();
document.add(newPathField(path));
String name = getName(path);
if (name != null) {
document.add(newFulltextField(name));
}
+ for (Field f : fields) {
+ document.add(f);
+ }
return document;
}
@@ -228,8 +235,9 @@ public class LuceneIndexEditor implement
return name.charAt(0) != ':';
}
- private void addBinaryValue(
- Document doc, PropertyState property, NodeState state) {
+ private List<Field> newBinary(
+ PropertyState property, NodeState state) {
+ List<Field> fields = new ArrayList<Field>();
Metadata metadata = new Metadata();
if (JCR_DATA.equals(property.getName())) {
String type = state.getString(JcrConstants.JCR_MIMETYPE);
@@ -243,8 +251,9 @@ public class LuceneIndexEditor implement
}
for (Blob v : property.getValue(Type.BINARIES)) {
- doc.add(newFulltextField(parseStringValue(v, metadata)));
+ fields.add(newFulltextField(parseStringValue(v, metadata)));
}
+ return fields;
}
private String parseStringValue(Blob v, Metadata metadata) {