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);