|
@@ -63,8 +63,19 @@ public class DateFieldTypeTests extends FieldTypeTestCase {
|
|
|
);
|
|
|
}
|
|
|
|
|
|
+ public void testIsFieldWithinRangeOnlyDocValues() throws IOException {
|
|
|
+ QueryRewriteContext context = new QueryRewriteContext(parserConfig(), writableRegistry(), null, () -> nowInMillis);
|
|
|
+ IndexReader reader = new MultiReader();
|
|
|
+ DateFieldType ft = new DateFieldType("my_date", false);
|
|
|
+ // in case of only doc-values, we can't establish disjointness
|
|
|
+ assertEquals(
|
|
|
+ Relation.INTERSECTS,
|
|
|
+ ft.isFieldWithinQuery(reader, "2015-10-12", "2016-04-03", randomBoolean(), randomBoolean(), null, null, context)
|
|
|
+ );
|
|
|
+ }
|
|
|
+
|
|
|
public void testIsFieldWithinQueryDateMillis() throws IOException {
|
|
|
- DateFieldType ft = new DateFieldType("my_date", Resolution.MILLISECONDS);
|
|
|
+ DateFieldType ft = new DateFieldType("my_date");
|
|
|
isFieldWithinRangeTestCase(ft);
|
|
|
}
|
|
|
|
|
@@ -192,11 +203,15 @@ public class DateFieldTypeTests extends FieldTypeTestCase {
|
|
|
);
|
|
|
assertEquals(expected, ft.termQuery(date, context));
|
|
|
|
|
|
+ ft = new DateFieldType("field", false);
|
|
|
+ expected = SortedNumericDocValuesField.newSlowRangeQuery("field", instant, instant + 999);
|
|
|
+ assertEquals(expected, ft.termQuery(date, context));
|
|
|
+
|
|
|
MappedFieldType unsearchable = new DateFieldType(
|
|
|
"field",
|
|
|
false,
|
|
|
false,
|
|
|
- true,
|
|
|
+ false,
|
|
|
DateFieldMapper.DEFAULT_DATE_TIME_FORMATTER,
|
|
|
Resolution.MILLISECONDS,
|
|
|
null,
|
|
@@ -204,7 +219,7 @@ public class DateFieldTypeTests extends FieldTypeTestCase {
|
|
|
Collections.emptyMap()
|
|
|
);
|
|
|
IllegalArgumentException e = expectThrows(IllegalArgumentException.class, () -> unsearchable.termQuery(date, context));
|
|
|
- assertEquals("Cannot search on field [field] since it is not indexed.", e.getMessage());
|
|
|
+ assertEquals("Cannot search on field [field] since it is not indexed nor has doc values.", e.getMessage());
|
|
|
}
|
|
|
|
|
|
public void testRangeQuery() throws IOException {
|
|
@@ -245,6 +260,10 @@ public class DateFieldTypeTests extends FieldTypeTestCase {
|
|
|
);
|
|
|
assertEquals(expected, ft.rangeQuery(date1, date2, true, true, null, null, null, context).rewrite(new MultiReader()));
|
|
|
|
|
|
+ MappedFieldType ft2 = new DateFieldType("field", false);
|
|
|
+ Query expected2 = SortedNumericDocValuesField.newSlowRangeQuery("field", instant1, instant2);
|
|
|
+ assertEquals(expected2, ft2.rangeQuery(date1, date2, true, true, null, null, null, context).rewrite(new MultiReader()));
|
|
|
+
|
|
|
instant1 = nowInMillis;
|
|
|
instant2 = instant1 + 100;
|
|
|
expected = new DateRangeIncludingNowQuery(
|
|
@@ -255,11 +274,14 @@ public class DateFieldTypeTests extends FieldTypeTestCase {
|
|
|
);
|
|
|
assertEquals(expected, ft.rangeQuery("now", instant2, true, true, null, null, null, context));
|
|
|
|
|
|
+ expected2 = new DateRangeIncludingNowQuery(SortedNumericDocValuesField.newSlowRangeQuery("field", instant1, instant2));
|
|
|
+ assertEquals(expected2, ft2.rangeQuery("now", instant2, true, true, null, null, null, context));
|
|
|
+
|
|
|
MappedFieldType unsearchable = new DateFieldType(
|
|
|
"field",
|
|
|
false,
|
|
|
false,
|
|
|
- true,
|
|
|
+ false,
|
|
|
DateFieldMapper.DEFAULT_DATE_TIME_FORMATTER,
|
|
|
Resolution.MILLISECONDS,
|
|
|
null,
|
|
@@ -270,7 +292,7 @@ public class DateFieldTypeTests extends FieldTypeTestCase {
|
|
|
IllegalArgumentException.class,
|
|
|
() -> unsearchable.rangeQuery(date1, date2, true, true, null, null, null, context)
|
|
|
);
|
|
|
- assertEquals("Cannot search on field [field] since it is not indexed.", e.getMessage());
|
|
|
+ assertEquals("Cannot search on field [field] since it is not indexed nor has doc values.", e.getMessage());
|
|
|
}
|
|
|
|
|
|
public void testRangeQueryWithIndexSort() {
|
|
@@ -321,6 +343,10 @@ public class DateFieldTypeTests extends FieldTypeTestCase {
|
|
|
new IndexOrDocValuesQuery(pointQuery, dvQuery)
|
|
|
);
|
|
|
assertEquals(expected, ft.rangeQuery(date1, date2, true, true, null, null, null, context));
|
|
|
+
|
|
|
+ ft = new DateFieldType("field", false);
|
|
|
+ expected = new IndexSortSortedNumericDocValuesRangeQuery("field", instant1, instant2, dvQuery);
|
|
|
+ assertEquals(expected, ft.rangeQuery(date1, date2, true, true, null, null, null, context));
|
|
|
}
|
|
|
|
|
|
public void testDateNanoDocValues() throws IOException {
|