Author: tommaso
Date: Wed Nov 18 10:30:47 2015
New Revision: 1714961
URL: http://svn.apache.org/viewvc?rev=1714961&view=rev
Log:
OAK-3650 - index excerpt should be used for binaries
Modified:
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ResultRowImpl.java
jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/FieldFactory.java
jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndex.java
jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexEditor.java
jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LucenePropertyIndex.java
Modified:
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ResultRowImpl.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ResultRowImpl.java?rev=1714961&r1=1714960&r2=1714961&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ResultRowImpl.java
(original)
+++
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ResultRowImpl.java
Wed Nov 18 10:30:47 2015
@@ -110,28 +110,27 @@ public class ResultRowImpl implements Re
// even though the query doesn't contain that column
if (columnName.startsWith(QueryImpl.REP_EXCERPT)) {
int columnIndex = query.getColumnIndex(QueryImpl.REP_EXCERPT);
- if (columnIndex >= 0 && QueryImpl.REP_EXCERPT.equals(columnName)
|| SimpleExcerptProvider.REP_EXCERPT_FN.
- equals(columnName)) {
- // TODO : make it possible to extract property level excerpts,
e.g. rep:excerpt(text) from indexes
- PropertyValue value = values[columnIndex];
- if (value != null) {
- return SimpleExcerptProvider.getExcerpt(value);
- } else {
- return getFallbackExcerpt(columnName);
+ PropertyValue indexExcerptValue = null;
+ if (columnIndex >= 0) {
+ indexExcerptValue = values[columnIndex];
+ if (indexExcerptValue != null) {
+ if (QueryImpl.REP_EXCERPT.equals(columnName) ||
SimpleExcerptProvider.REP_EXCERPT_FN.equals(columnName)) {
+ return
SimpleExcerptProvider.getExcerpt(indexExcerptValue);
+ }
}
- } else {
- // missing excerpt, generate a default value
- return getFallbackExcerpt(columnName);
}
+ return getFallbackExcerpt(columnName, indexExcerptValue);
}
throw new IllegalArgumentException("Column not found: " + columnName);
}
- private PropertyValue getFallbackExcerpt(String columnName) {
+ private PropertyValue getFallbackExcerpt(String columnName, PropertyValue
indexValue) {
String ex = SimpleExcerptProvider.getExcerpt(getPath(), columnName,
query, true);
- if (ex != null) {
+ if (ex != null && ex.length() > 24) {
return PropertyValues.newString(ex);
+ } else if (indexValue != null) {
+ return SimpleExcerptProvider.getExcerpt(indexValue);
}
return PropertyValues.newString(getPath());
}
Modified:
jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/FieldFactory.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/FieldFactory.java?rev=1714961&r1=1714960&r2=1714961&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/FieldFactory.java
(original)
+++
jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/FieldFactory.java
Wed Nov 18 10:30:47 2015
@@ -103,11 +103,19 @@ public final class FieldFactory {
}
public static Field newFulltextField(String value) {
- return new TextField(FULLTEXT, value, NO);
+ return newFulltextField(value, false);
}
public static Field newFulltextField(String name, String value) {
- return new TextField(FieldNames.createFulltextFieldName(name), value,
NO);
+ return newFulltextField(name, value, false);
+ }
+
+ public static Field newFulltextField(String value, boolean stored) {
+ return new TextField(FULLTEXT, value, stored ? YES : NO);
+ }
+
+ public static Field newFulltextField(String name, String value, boolean
stored) {
+ return new TextField(FieldNames.createFulltextFieldName(name), value,
stored ? YES : NO);
}
public static Field newAncestorsField(String path){
Modified:
jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndex.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndex.java?rev=1714961&r1=1714960&r2=1714961&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndex.java
(original)
+++
jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndex.java
Wed Nov 18 10:30:47 2015
@@ -16,25 +16,6 @@
*/
package org.apache.jackrabbit.oak.plugins.index.lucene;
-import static com.google.common.base.Preconditions.checkState;
-import static org.apache.jackrabbit.JcrConstants.JCR_MIXINTYPES;
-import static org.apache.jackrabbit.JcrConstants.JCR_PRIMARYTYPE;
-import static org.apache.jackrabbit.oak.api.Type.STRING;
-import static org.apache.jackrabbit.oak.commons.PathUtils.denotesRoot;
-import static org.apache.jackrabbit.oak.commons.PathUtils.getAncestorPath;
-import static org.apache.jackrabbit.oak.commons.PathUtils.getDepth;
-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.LuceneIndexConstants.VERSION;
-import static
org.apache.jackrabbit.oak.plugins.index.lucene.TermFactory.newFulltextTerm;
-import static
org.apache.jackrabbit.oak.plugins.index.lucene.TermFactory.newPathTerm;
-import static
org.apache.jackrabbit.oak.plugins.index.lucene.util.LuceneIndexHelper.skipTokenization;
-import static org.apache.jackrabbit.oak.query.QueryImpl.JCR_PATH;
-import static org.apache.lucene.search.BooleanClause.Occur.MUST;
-import static org.apache.lucene.search.BooleanClause.Occur.MUST_NOT;
-import static org.apache.lucene.search.BooleanClause.Occur.SHOULD;
-
import java.io.IOException;
import java.io.StringReader;
import java.util.ArrayList;
@@ -47,6 +28,10 @@ import java.util.List;
import java.util.Set;
import java.util.concurrent.atomic.AtomicReference;
+import com.google.common.collect.AbstractIterator;
+import com.google.common.collect.Iterables;
+import com.google.common.collect.Queues;
+import com.google.common.collect.Sets;
import org.apache.jackrabbit.JcrConstants;
import org.apache.jackrabbit.oak.api.PropertyValue;
import org.apache.jackrabbit.oak.api.Result.SizePrecision;
@@ -112,10 +97,18 @@ import org.apache.lucene.util.Version;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import com.google.common.collect.AbstractIterator;
-import com.google.common.collect.Iterables;
-import com.google.common.collect.Queues;
-import com.google.common.collect.Sets;
+import static com.google.common.base.Preconditions.checkState;
+import static org.apache.jackrabbit.JcrConstants.JCR_MIXINTYPES;
+import static org.apache.jackrabbit.JcrConstants.JCR_PRIMARYTYPE;
+import static org.apache.jackrabbit.oak.api.Type.STRING;
+import static org.apache.jackrabbit.oak.commons.PathUtils.*;
+import static org.apache.jackrabbit.oak.plugins.index.lucene.FieldNames.PATH;
+import static
org.apache.jackrabbit.oak.plugins.index.lucene.LuceneIndexConstants.VERSION;
+import static
org.apache.jackrabbit.oak.plugins.index.lucene.TermFactory.newFulltextTerm;
+import static
org.apache.jackrabbit.oak.plugins.index.lucene.TermFactory.newPathTerm;
+import static
org.apache.jackrabbit.oak.plugins.index.lucene.util.LuceneIndexHelper.skipTokenization;
+import static org.apache.jackrabbit.oak.query.QueryImpl.JCR_PATH;
+import static org.apache.lucene.search.BooleanClause.Occur.*;
/**
* Provides a QueryIndex that does lookups against a Lucene-based index
@@ -498,11 +491,11 @@ public class LuceneIndex implements Adva
QueryScorer scorer = new QueryScorer(query);
scorer.setExpandMultiTermQuery(true);
highlighter.setFragmentScorer(scorer);
+ Analyzer analyzer = indexNode.getDefinition().getAnalyzer();
for (IndexableField field :
searcher.getIndexReader().document(doc.doc).getFields())
if (!FieldNames.SUGGEST.equals(field.name())) {
try {
- Analyzer analyzer =
indexNode.getDefinition().getAnalyzer();
TokenStream tokenStream =
analyzer.tokenStream(field.name(), field.stringValue());
tokenStream.reset();
CachingTokenFilter cachingTokenFilter = new
CachingTokenFilter(tokenStream);
Modified:
jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexEditor.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexEditor.java?rev=1714961&r1=1714960&r2=1714961&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexEditor.java
(original)
+++
jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexEditor.java
Wed Nov 18 10:30:47 2015
@@ -569,9 +569,9 @@ public class LuceneIndexEditor implement
}
if (nodePath != null){
- fields.add(newFulltextField(nodePath, value));
+ fields.add(newFulltextField(nodePath, value, true));
} else {
- fields.add(newFulltextField(value));
+ fields.add(newFulltextField(value, true));
}
}
return fields;
Modified:
jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LucenePropertyIndex.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LucenePropertyIndex.java?rev=1714961&r1=1714960&r2=1714961&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LucenePropertyIndex.java
(original)
+++
jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LucenePropertyIndex.java
Wed Nov 18 10:30:47 2015
@@ -511,10 +511,10 @@ public class LucenePropertyIndex impleme
scorer.setExpandMultiTermQuery(true);
highlighter.setFragmentScorer(scorer);
+ Analyzer analyzer = indexNode.getDefinition().getAnalyzer();
for (IndexableField field :
searcher.getIndexReader().document(doc.doc).getFields())
if (!SUGGEST.equals(field.name())) {
try {
- Analyzer analyzer =
indexNode.getDefinition().getAnalyzer();
TokenStream tokenStream =
analyzer.tokenStream(field.name(), field.stringValue());
tokenStream.reset();
CachingTokenFilter cachingTokenFilter = new
CachingTokenFilter(tokenStream);