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 2014/11/03 13:32:27 UTC
svn commit: r1636336 - in /jackrabbit/oak/trunk/oak-lucene/src:
main/java/org/apache/jackrabbit/oak/plugins/index/lucene/
main/java/org/apache/jackrabbit/oak/plugins/index/lucene/util/
test/java/org/apache/jackrabbit/oak/plugins/index/lucene/
Author: tommaso
Date: Mon Nov 3 12:32:26 2014
New Revision: 1636336
URL: http://svn.apache.org/r1636336
Log:
OAK-2178 - applied patch from Rishabh Maurya for lucene field boost at index time
Modified:
jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexConstants.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/PropertyDefinition.java
jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/util/MoreLikeThisHelper.java
jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/LucenePropertyIndexTest.java
Modified: jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexConstants.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexConstants.java?rev=1636336&r1=1636335&r2=1636336&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexConstants.java (original)
+++ jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexConstants.java Mon Nov 3 12:32:26 2014
@@ -100,4 +100,10 @@ public interface LuceneIndexConstants {
* Child node name under which property details are provided
*/
String PROP_NODE = "properties";
+
+ /**
+ * Field boost factor
+ */
+ String FIELD_BOOST = "boost";
+
}
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=1636336&r1=1636335&r2=1636336&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 Mon Nov 3 12:32:26 2014
@@ -338,7 +338,13 @@ public class LuceneIndexEditor implement
!context.skipTokenization(pname),
context.isStored(pname)));
if (context.isFullTextEnabled()) {
- fields.add(newFulltextField(value));
+ Field field = newFulltextField(value);
+ boolean hasBoost = context.getDefinition().getPropDefn(pname) != null &&
+ context.getDefinition().getPropDefn(pname).hasFieldBoost();
+ if (hasBoost) {
+ field.setBoost((float)context.getDefinition().getPropDefn(pname).fieldBoost());
+ }
+ fields.add(field);
}
dirty = true;
}
Modified: jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/PropertyDefinition.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/PropertyDefinition.java?rev=1636336&r1=1636335&r2=1636336&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/PropertyDefinition.java (original)
+++ jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/PropertyDefinition.java Mon Nov 3 12:32:26 2014
@@ -21,6 +21,7 @@ package org.apache.jackrabbit.oak.plugin
import javax.jcr.PropertyType;
+import org.apache.jackrabbit.oak.api.Type;
import org.apache.jackrabbit.oak.spi.state.NodeBuilder;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -31,6 +32,8 @@ class PropertyDefinition {
private final NodeBuilder definition;
private final int propertyType;
+ private double fieldBoost;
+ private boolean hasFieldBoost;
public PropertyDefinition(IndexDefinition idxDefn, String name, NodeBuilder defn) {
this.name = name;
@@ -46,9 +49,20 @@ class PropertyDefinition {
}
}
this.propertyType = type;
+ this.hasFieldBoost = defn.hasProperty(LuceneIndexConstants.FIELD_BOOST) && (defn.getProperty(LuceneIndexConstants.FIELD_BOOST).getType().tag() == Type.DOUBLE.tag());
+ // if !hasFieldBoost then setting default lucene field boost = 1.0
+ fieldBoost = hasFieldBoost ? defn.getProperty(LuceneIndexConstants.FIELD_BOOST).getValue(Type.DOUBLE) : 1.0;
}
public int getPropertyType() {
return propertyType;
}
+
+ public boolean hasFieldBoost() {
+ return hasFieldBoost;
+ }
+
+ public double fieldBoost() {
+ return fieldBoost;
+ }
}
Modified: jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/util/MoreLikeThisHelper.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/util/MoreLikeThisHelper.java?rev=1636336&r1=1636335&r2=1636336&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/util/MoreLikeThisHelper.java (original)
+++ jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/util/MoreLikeThisHelper.java Mon Nov 3 12:32:26 2014
@@ -94,7 +94,7 @@ public class MoreLikeThisHelper {
fieldNames.add(f.name());
}
}
- String[] docFields = fieldNames.toArray(new String[0]);
+ String[] docFields = fieldNames.toArray(new String[fieldNames.size()]);
mlt.setFieldNames(docFields);
moreLikeThisQuery = mlt.like(d.doc);
}
Modified: jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/LucenePropertyIndexTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/LucenePropertyIndexTest.java?rev=1636336&r1=1636335&r2=1636336&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/LucenePropertyIndexTest.java (original)
+++ jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/LucenePropertyIndexTest.java Mon Nov 3 12:32:26 2014
@@ -667,8 +667,49 @@ public class LucenePropertyIndexTest ext
assertOrderedQuery("select [jcr:path] from [nt:base] where [bar] = 'baz' order by [foo] asc, [baz] desc", getSortedPaths(tuples));
}
+ @Test
+ public void indexTimeFieldBoost() throws Exception {
+
+ // Index Definition
+ Tree idx = createIndex("test1", of("propa", "propb", "propc"));
+ idx.setProperty(LuceneIndexConstants.FULL_TEXT_ENABLED, true);
+ Tree propNode = idx.addChild(PROP_NODE);
+ root.commit();
+
+ // property definition for index test1
+ Tree propA = propNode.addChild("propa");
+ propA.setProperty(LuceneIndexConstants.PROP_TYPE, PropertyType.TYPENAME_STRING);
+ propA.setProperty(LuceneIndexConstants.FIELD_BOOST, 2.0);
+
+ Tree propB = propNode.addChild("propb");
+ propB.setProperty(LuceneIndexConstants.PROP_TYPE, PropertyType.TYPENAME_STRING);
+ propB.setProperty(LuceneIndexConstants.FIELD_BOOST, 1.0);
+
+ Tree propC = propNode.addChild("propc");
+ propC.setProperty(LuceneIndexConstants.PROP_TYPE, PropertyType.TYPENAME_STRING);
+ propC.setProperty(LuceneIndexConstants.FIELD_BOOST, 4.0);
+ root.commit();
+
+ // create test data
+ Tree test = root.getTree("/").addChild("test");
+ root.commit();
+ test.addChild("a").setProperty("propa", "foo");
+ test.addChild("b").setProperty("propb", "foo");
+ test.addChild("c").setProperty("propc", "foo");
+ root.commit();
+
+ String queryString = "//* [jcr:contains(., 'foo' )]";
+ // verify results ordering
+ // which should be /test/c (boost = 4.0), /test/a(boost = 2.0), /test/b (1.0)
+ assertOrderedQuery(queryString, asList("/test/c", "/test/a", "/test/b"), XPATH, true);
+ }
+
private void assertOrderedQuery(String sql, List<String> paths) {
- List<String> result = executeQuery(sql, SQL2, true);
+ assertOrderedQuery(sql, paths, SQL2, false);
+ }
+
+ private void assertOrderedQuery(String sql, List<String> paths, String language, boolean skipSort) {
+ List<String> result = executeQuery(sql, language, true, skipSort);
assertEquals(paths, result);
}