diff --git a/oak-core/src/test/java/org/apache/jackrabbit/oak/query/AbstractQueryTest.java b/oak-core/src/test/java/org/apache/jackrabbit/oak/query/AbstractQueryTest.java
index a50352b..83168f7 100644
--- a/oak-core/src/test/java/org/apache/jackrabbit/oak/query/AbstractQueryTest.java
+++ b/oak-core/src/test/java/org/apache/jackrabbit/oak/query/AbstractQueryTest.java
@@ -71,6 +71,7 @@ public abstract class AbstractQueryTest {
 
     protected static final String TEST_INDEX_NAME = "test-index";
     protected static final String SQL2 = QueryEngineImpl.SQL2;
+    protected static final String XPATH = QueryEngineImpl.XPATH;
 
     protected QueryEngine qe;
     protected ContentSession session;
@@ -231,6 +232,10 @@ public abstract class AbstractQueryTest {
     }
 
     protected List<String> executeQuery(String query, String language, boolean pathsOnly) {
+        return executeQuery(query, language, pathsOnly, false);
+    }
+
+    protected List<String> executeQuery(String query, String language, boolean pathsOnly, boolean skipSort) {
         long time = System.currentTimeMillis();
         List<String> lines = new ArrayList<String>();
         try {
@@ -242,7 +247,7 @@ public abstract class AbstractQueryTest {
                 }
                 lines.add(r);
             }
-            if (!query.contains("order by")) {
+            if (!query.contains("order by") && !skipSort) {
                 Collections.sort(lines);
             }
         } catch (ParseException e) {
@@ -263,13 +268,19 @@ public abstract class AbstractQueryTest {
 
     protected List<String> assertQuery(String sql, String language,
             List<String> expected) {
-        List<String> paths = executeQuery(sql, language, true);
+        return assertQuery(sql, language, expected, false);
+    }
+
+    protected List<String> assertQuery(String sql, String language,
+                                       List<String> expected, boolean skipSort) {
+        List<String> paths = executeQuery(sql, language, true, skipSort);
         for (String p : expected) {
             assertTrue("Expected path " + p + " not found", paths.contains(p));
         }
         assertEquals("Result set size is different", expected.size(),
                 paths.size());
         return paths;
+
     }
 
     protected void setTraversalEnabled(boolean traversalEnabled) {
diff --git a/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexConstants.java b/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexConstants.java
index 799d519..826f201 100644
--- a/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexConstants.java
+++ b/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexConstants.java
@@ -100,4 +100,7 @@ public interface LuceneIndexConstants {
      * Child node name under which property details are provided
      */
     String PROP_NODE = "properties";
+
+    String FIELD_BOOST = "fieldBoost";
+
 }
diff --git a/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexEditor.java b/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexEditor.java
index 051c478..a7b6c5e 100644
--- a/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexEditor.java
+++ b/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexEditor.java
@@ -338,7 +338,13 @@ public class LuceneIndexEditor implements IndexEditor {
                         !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;
             }
diff --git a/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/PropertyDefinition.java b/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/PropertyDefinition.java
index b60cdcf..20b7377 100644
--- a/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/PropertyDefinition.java
+++ b/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/PropertyDefinition.java
@@ -21,6 +21,7 @@ package org.apache.jackrabbit.oak.plugins.index.lucene;
 
 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;
+    }
 }
diff --git a/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/LucenePropertyIndexTest.java b/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/LucenePropertyIndexTest.java
index c17e8a5..8574802 100644
--- a/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/LucenePropertyIndexTest.java
+++ b/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/LucenePropertyIndexTest.java
@@ -667,8 +667,49 @@ public class LucenePropertyIndexTest extends AbstractQueryTest {
         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);
     }
 
