OAK-9298 - Date Range queries not working in elastic search index

git-svn-id: https://svn.apache.org/repos/asf/jackrabbit/oak/trunk@1884412 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/oak-search-elastic/src/main/java/org/apache/jackrabbit/oak/plugins/index/elastic/query/ElasticRequestHandler.java b/oak-search-elastic/src/main/java/org/apache/jackrabbit/oak/plugins/index/elastic/query/ElasticRequestHandler.java
index 47ca492..b32d334 100644
--- a/oak-search-elastic/src/main/java/org/apache/jackrabbit/oak/plugins/index/elastic/query/ElasticRequestHandler.java
+++ b/oak-search-elastic/src/main/java/org/apache/jackrabbit/oak/plugins/index/elastic/query/ElasticRequestHandler.java
@@ -757,7 +757,7 @@
         QueryBuilder in;
         switch (propType) {
             case PropertyType.DATE: {
-                in = newPropertyRestrictionQuery(field, pr, value -> parse(value.getValue(Type.DATE)).getTime());
+                in = newPropertyRestrictionQuery(field, pr, value -> parse(value.getValue(Type.DATE)).getTimeInMillis());
                 break;
             }
             case PropertyType.DOUBLE: {
diff --git a/oak-search/src/test/java/org/apache/jackrabbit/oak/plugins/index/PropertyIndexCommonTest.java b/oak-search/src/test/java/org/apache/jackrabbit/oak/plugins/index/PropertyIndexCommonTest.java
index 3f8cf10..3bc1126 100644
--- a/oak-search/src/test/java/org/apache/jackrabbit/oak/plugins/index/PropertyIndexCommonTest.java
+++ b/oak-search/src/test/java/org/apache/jackrabbit/oak/plugins/index/PropertyIndexCommonTest.java
@@ -17,6 +17,8 @@
 package org.apache.jackrabbit.oak.plugins.index;
 
 import org.apache.jackrabbit.oak.api.Tree;
+import org.apache.jackrabbit.oak.api.Type;
+import org.apache.jackrabbit.oak.plugins.index.search.FulltextIndexConstants;
 import org.apache.jackrabbit.oak.plugins.index.search.util.IndexDefinitionBuilder;
 import org.apache.jackrabbit.oak.query.AbstractQueryTest;
 import org.junit.Test;
@@ -24,6 +26,7 @@
 import java.util.Arrays;
 
 import static java.util.Collections.singletonList;
+import static javax.jcr.PropertyType.TYPENAME_DATE;
 import static org.apache.jackrabbit.oak.plugins.index.search.FulltextIndexConstants.PROPDEF_PROP_NODE_NAME;
 import static org.hamcrest.CoreMatchers.containsString;
 import static org.hamcrest.MatcherAssert.assertThat;
@@ -168,6 +171,37 @@
                 Arrays.asList("/test/a", "/test/b")));
     }
 
+    @Test
+    public void dateQuery() throws Exception {
+        Tree index = root.getTree("/");
+        Tree indexDefn = createTestIndexNode(index, indexOptions.getIndexType());
+        TestUtil.useV2(indexDefn);
+
+        Tree props = TestUtil.newRulePropTree(indexDefn, "nt:base");
+        Tree prop = TestUtil.enablePropertyIndex(props, "date", false);
+        prop.setProperty(FulltextIndexConstants.PROP_TYPE, TYPENAME_DATE);
+        root.commit();
+
+        Tree test = root.getTree("/").addChild("test");
+        Tree a = test.addChild("a");
+        Tree b = test.addChild("b");
+        Tree c = test.addChild("c");
+        Tree d = test.addChild("d");
+        a.setProperty("date", "2020-12-07T11:45:48.119Z", Type.DATE);
+        b.setProperty("date", "2020-12-07T17:23:33.933Z", Type.DATE);
+        c.setProperty("date", "2020-12-07T22:23:33.933Z", Type.DATE);
+        d.setProperty("date", "2020-12-07T10:23:33.933-09:00", Type.DATE);
+        root.commit();
+
+        assertEventually(() -> assertQuery("select [jcr:path] from [nt:base] where date > CAST('2020-12-06T12:32:35.886Z' AS DATE)",
+                Arrays.asList("/test/a", "/test/b", "/test/c", "/test/d")));
+        assertEventually(() -> assertQuery("select [jcr:path] from [nt:base] where date > CAST('2020-12-07T12:32:35.886Z' AS DATE) " +
+                        "and date < CAST('2020-12-07T20:32:35.886Z' AS DATE)",
+                Arrays.asList("/test/b", "/test/d")));
+        assertEventually(() -> assertQuery("select [jcr:path] from [nt:base] where date < CAST('2020-12-07T11:23:33.933-09:00' AS DATE)",
+                Arrays.asList("/test/a", "/test/b", "/test/d")));
+    }
+
     private String explain(String query) {
         String explain = "explain " + query;
         return executeQuery(explain, "JCR-SQL2").get(0);