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 to...@apache.org on 2015/04/28 12:16:14 UTC
svn commit: r1676463 - in /jackrabbit/oak/branches/1.2: ./
oak-solr-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/solr/index/
oak-solr-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/solr/query/
oak-solr-core/src/main/java/org/a...
Author: tommaso
Date: Tue Apr 28 10:16:14 2015
New Revision: 1676463
URL: http://svn.apache.org/r1676463
Log:
OAK-2750 - indexing only the first 1024 chars for sorting (branch 1.2)
Added:
jackrabbit/oak/branches/1.2/oak-solr-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/solr/util/SolrUtils.java
- copied unchanged from r1672642, jackrabbit/oak/trunk/oak-solr-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/solr/util/SolrUtils.java
Modified:
jackrabbit/oak/branches/1.2/ (props changed)
jackrabbit/oak/branches/1.2/oak-solr-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/solr/index/SolrIndexEditor.java
jackrabbit/oak/branches/1.2/oak-solr-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/solr/query/FilterQueryParser.java
jackrabbit/oak/branches/1.2/oak-solr-core/src/main/resources/solr/oak/conf/schema.xml
jackrabbit/oak/branches/1.2/oak-solr-core/src/test/resources/solr/oak/conf/schema.xml
Propchange: jackrabbit/oak/branches/1.2/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Tue Apr 28 10:16:14 2015
@@ -1,3 +1,3 @@
/jackrabbit/oak/branches/1.0:1665962
-/jackrabbit/oak/trunk:1672350,1672468,1672537,1672603,1672834-1672835,1673351,1673410,1673436,1673644,1673662-1673664,1673669,1673695,1674046,1674065,1674075,1674107,1674228,1674880,1675055,1675332,1675354,1675357,1675593,1676198,1676458
+/jackrabbit/oak/trunk:1672350,1672468,1672537,1672603,1672642,1672644,1672834-1672835,1673351,1673410,1673436,1673644,1673662-1673664,1673669,1673695,1674046,1674065,1674075,1674107,1674228,1674880,1675055,1675332,1675354,1675357,1675593,1676198,1676458
/jackrabbit/trunk:1345480
Modified: jackrabbit/oak/branches/1.2/oak-solr-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/solr/index/SolrIndexEditor.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/branches/1.2/oak-solr-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/solr/index/SolrIndexEditor.java?rev=1676463&r1=1676462&r2=1676463&view=diff
==============================================================================
--- jackrabbit/oak/branches/1.2/oak-solr-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/solr/index/SolrIndexEditor.java (original)
+++ jackrabbit/oak/branches/1.2/oak-solr-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/solr/index/SolrIndexEditor.java Tue Apr 28 10:16:14 2015
@@ -45,6 +45,9 @@ import org.slf4j.LoggerFactory;
import static org.apache.jackrabbit.JcrConstants.JCR_DATA;
import static org.apache.jackrabbit.oak.commons.PathUtils.concat;
+import static org.apache.jackrabbit.oak.commons.PathUtils.denotesRoot;
+import static org.apache.jackrabbit.oak.plugins.index.solr.util.SolrUtils.getSortingField;
+import static org.apache.jackrabbit.oak.plugins.index.solr.util.SolrUtils.partialEscape;
/**
* Index editor for keeping a Solr index up to date.
@@ -204,21 +207,6 @@ class SolrIndexEditor implements IndexEd
return null; // no need to recurse down the removed subtree
}
- private static CharSequence partialEscape(CharSequence s) {
- StringBuilder sb = new StringBuilder();
- for (int i = 0; i < s.length(); i++) {
- char c = s.charAt(i);
- if (c == '\\' || c == '!' || c == '(' || c == ')' ||
- c == ':' || c == '^' || c == '[' || c == ']' || c == '/' ||
- c == '{' || c == '}' || c == '~' || c == '*' || c == '?' ||
- c == '-' || c == ' ') {
- sb.append('\\');
- }
- sb.append(c);
- }
- return sb;
- }
-
private SolrInputDocument docFromState(NodeState state) {
SolrInputDocument inputDocument = new SolrInputDocument();
String path = getPath();
@@ -228,63 +216,53 @@ class SolrIndexEditor implements IndexEd
|| !configuration.getIgnoredProperties().contains(property.getName())) {
// try to get the field to use for this property from configuration
String fieldName = configuration.getFieldNameFor(property.getType());
+ Object fieldValue;
if (fieldName != null) {
- Object value = property.getValue(property.getType());
- inputDocument.addField(fieldName, value);
- // add sort field
- inputDocument.addField(getSortingField(property.getType().tag(), property.getName()), value);
+ fieldValue = property.getValue(property.getType());
} else {
+ fieldName = property.getName();
if (Type.BINARY.tag() == property.getType().tag()) {
- List<String> value = extractTextValues(property, state);
- inputDocument.addField(property.getName(), value);
- StringBuilder builder = new StringBuilder();
- for (String v : value) {
- if (builder.length() > 0) {
- builder.append(',');
- }
- builder.append(v);
- }
- // add sort field
- inputDocument.addField(getSortingField(property.getType().tag(), property.getName()), builder.toString());
- } else if (property.isArray()) { // or fallback to adding propertyName:stringValue(s)
- Iterable<String> strings = property.getValue(Type.STRINGS);
- StringBuilder builder = new StringBuilder();
- for (String s : strings) {
- inputDocument.addField(property.getName(), s);
- if (builder.length() > 0) {
- builder.append(',');
- }
- builder.append(s);
+ fieldValue = extractTextValues(property, state);
+ } else if (property.isArray()) {
+ fieldValue = property.getValue(Type.STRINGS);
+ } else {
+ fieldValue = property.getValue(Type.STRING);
+ }
+ }
+ // add property field
+ inputDocument.addField(fieldName, fieldValue);
+
+ Object sortValue;
+ if (fieldValue instanceof Iterable) {
+ Iterable values = (Iterable) fieldValue;
+ StringBuilder builder = new StringBuilder();
+ String stringValue = null;
+ for (Object value : values) {
+ builder.append(value);
+ if (builder.length() > 1024) {
+ stringValue = builder.substring(0, 1024);
+ break;
}
- // add sort field
- inputDocument.addField(getSortingField(property.getType().tag(), property.getName()), builder.toString());
+ }
+ if (stringValue == null) {
+ stringValue = builder.toString();
+ }
+ sortValue = stringValue;
+ } else {
+ if (fieldValue.toString().length() > 1024) {
+ sortValue = fieldValue.toString().substring(0, 1024);
} else {
- String value = property.getValue(Type.STRING);
- inputDocument.addField(property.getName(), value);
- // add sort field
- inputDocument.addField(getSortingField(property.getType().tag(), property.getName()), value);
+ sortValue = fieldValue;
}
}
+
+ // add sort field
+ inputDocument.addField(getSortingField(property.getType().tag(), property.getName()), sortValue);
}
}
return inputDocument;
}
- private String getSortingField(int tag, String s) {
-// switch (tag) {
-// case PropertyType.LONG:
-// return s+"_long_sort";
-// case PropertyType.DATE:
-// return s+"_date_sort";
-// case PropertyType.DOUBLE:
-// return s+"_double_sort";
-// case PropertyType.STRING:
-// return s+"_string_sort";
-// default:
- return s+"_string_sort";
-// }
- }
-
private List<String> extractTextValues(
PropertyState property, NodeState state) {
List<String> values = new LinkedList<String>();
Modified: jackrabbit/oak/branches/1.2/oak-solr-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/solr/query/FilterQueryParser.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/branches/1.2/oak-solr-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/solr/query/FilterQueryParser.java?rev=1676463&r1=1676462&r2=1676463&view=diff
==============================================================================
--- jackrabbit/oak/branches/1.2/oak-solr-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/solr/query/FilterQueryParser.java (original)
+++ jackrabbit/oak/branches/1.2/oak-solr-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/solr/query/FilterQueryParser.java Tue Apr 28 10:16:14 2015
@@ -18,6 +18,7 @@ package org.apache.jackrabbit.oak.plugin
import java.util.Collection;
import java.util.List;
+import javax.jcr.PropertyType;
import org.apache.jackrabbit.oak.plugins.index.solr.configuration.OakSolrConfiguration;
import org.apache.jackrabbit.oak.query.fulltext.FullTextAnd;
@@ -33,6 +34,8 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import static org.apache.jackrabbit.oak.commons.PathUtils.getName;
+import static org.apache.jackrabbit.oak.plugins.index.solr.util.SolrUtils.getSortingField;
+import static org.apache.jackrabbit.oak.plugins.index.solr.util.SolrUtils.partialEscape;
/**
* the {@link org.apache.jackrabbit.oak.plugins.index.solr.query.FilterQueryParser} can parse {@link org.apache.jackrabbit.oak.spi.query.Filter}s
@@ -238,36 +241,6 @@ class FilterQueryParser {
return solrQuery;
}
- private static String getSortingField(int tag, String s) {
-// switch (tag) {
-// case PropertyType.LONG:
-// return s+"_long_sort";
-// case PropertyType.DATE:
-// return s+"_date_sort";
-// case PropertyType.DOUBLE:
-// return s+"_double_sort";
-// case PropertyType.STRING:
-// return s+"_string_sort";
-// default:
- return s+"_string_sort";
-// }
- }
-
- private static CharSequence partialEscape(CharSequence s) {
- StringBuilder sb = new StringBuilder();
- for (int i = 0; i < s.length(); i++) {
- char c = s.charAt(i);
- if (c == '\\' || c == '!' || c == '(' || c == ')' ||
- c == ':' || c == '^' || c == '[' || c == ']' || c == '/' ||
- c == '{' || c == '}' || c == '~' || c == '*' || c == '?' ||
- c == '-' || c == ' ') {
- sb.append('\\');
- }
- sb.append(c);
- }
- return sb;
- }
-
private static String parseFullTextExpression(FullTextExpression ft, final OakSolrConfiguration configuration) {
final StringBuilder fullTextString = new StringBuilder();
ft.accept(new FullTextVisitor() {
Modified: jackrabbit/oak/branches/1.2/oak-solr-core/src/main/resources/solr/oak/conf/schema.xml
URL: http://svn.apache.org/viewvc/jackrabbit/oak/branches/1.2/oak-solr-core/src/main/resources/solr/oak/conf/schema.xml?rev=1676463&r1=1676462&r2=1676463&view=diff
==============================================================================
--- jackrabbit/oak/branches/1.2/oak-solr-core/src/main/resources/solr/oak/conf/schema.xml (original)
+++ jackrabbit/oak/branches/1.2/oak-solr-core/src/main/resources/solr/oak/conf/schema.xml Tue Apr 28 10:16:14 2015
@@ -121,10 +121,9 @@
<field name="_version_" type="long" indexed="true" stored="true"/>
<!-- sorting dynamic fields -->
- <!--<dynamicField name="*_long_sort" type="tlong" indexed="false" stored="false" multiValued="false" docValues="true"/>-->
- <!--<dynamicField name="*_double_sort" type="tdouble" indexed="false" stored="false" multiValued="false" docValues="true"/>-->
- <!--<dynamicField name="*_date_sort" type="tdate" indexed="false" stored="false" multiValued="false" docValues="true"/>-->
+ <dynamicField name="*_double_sort" type="tdouble" indexed="false" stored="false" multiValued="false" docValues="true"/>
<dynamicField name="*_string_sort" type="string" indexed="false" stored="false" multiValued="false" docValues="true"/>
+ <dynamicField name="*_binary_sort" type="string" indexed="true" stored="false" multiValued="false" omitNorms="true"/>
<dynamicField name="*" type="text_general" indexed="true" stored="true" multiValued="true"/>
</fields>
Modified: jackrabbit/oak/branches/1.2/oak-solr-core/src/test/resources/solr/oak/conf/schema.xml
URL: http://svn.apache.org/viewvc/jackrabbit/oak/branches/1.2/oak-solr-core/src/test/resources/solr/oak/conf/schema.xml?rev=1676463&r1=1676462&r2=1676463&view=diff
==============================================================================
--- jackrabbit/oak/branches/1.2/oak-solr-core/src/test/resources/solr/oak/conf/schema.xml (original)
+++ jackrabbit/oak/branches/1.2/oak-solr-core/src/test/resources/solr/oak/conf/schema.xml Tue Apr 28 10:16:14 2015
@@ -133,10 +133,9 @@
<field name=":suggest" type="string" indexed="true" stored="true" multiValued="true" />
<!-- sorting dynamic fields -->
- <!--<dynamicField name="*_long_sort" type="tlong" indexed="false" stored="false" multiValued="false" docValues="true"/>-->
- <!--<dynamicField name="*_double_sort" type="tdouble" indexed="false" stored="false" multiValued="false" docValues="true"/>-->
- <!--<dynamicField name="*_date_sort" type="tdate" indexed="false" stored="false" multiValued="false" docValues="true"/>-->
+ <dynamicField name="*_double_sort" type="tdouble" indexed="false" stored="false" multiValued="false" docValues="true"/>
<dynamicField name="*_string_sort" type="string" indexed="false" stored="false" multiValued="false" docValues="true"/>
+ <dynamicField name="*_binary_sort" type="string" indexed="true" stored="false" multiValued="false" omitNorms="true"/>
<dynamicField name="*" type="text_general" indexed="true" stored="true" multiValued="true"/>
</fields>