|
@@ -31,6 +31,7 @@ import org.apache.lucene.search.TermQuery;
|
|
|
import org.apache.lucene.search.TermRangeQuery;
|
|
|
import org.elasticsearch.ElasticsearchParseException;
|
|
|
import org.elasticsearch.common.ParsingException;
|
|
|
+import org.elasticsearch.common.geo.ShapeRelation;
|
|
|
import org.elasticsearch.common.lucene.BytesRefs;
|
|
|
import org.elasticsearch.index.mapper.DateFieldMapper;
|
|
|
import org.elasticsearch.index.mapper.FieldNamesFieldMapper;
|
|
@@ -535,4 +536,29 @@ public class RangeQueryBuilderTests extends AbstractQueryTestCase<RangeQueryBuil
|
|
|
ParsingException e = expectThrows(ParsingException.class, () -> parseQuery(json));
|
|
|
assertEquals("[range] query doesn't support multiple fields, found [age] and [" + DATE_FIELD_NAME + "]", e.getMessage());
|
|
|
}
|
|
|
+
|
|
|
+ public void testParseRelation() {
|
|
|
+ String json =
|
|
|
+ "{\n" +
|
|
|
+ " \"range\": {\n" +
|
|
|
+ " \"age\": {\n" +
|
|
|
+ " \"gte\": 30,\n" +
|
|
|
+ " \"lte\": 40,\n" +
|
|
|
+ " \"relation\": \"disjoint\"\n" +
|
|
|
+ " }" +
|
|
|
+ " }\n" +
|
|
|
+ " }";
|
|
|
+ String fieldName = randomAlphaOfLengthBetween(1, 20);
|
|
|
+ IllegalArgumentException e1 = expectThrows(IllegalArgumentException.class, () -> parseQuery(json));
|
|
|
+ assertEquals("[range] query does not support relation [disjoint]", e1.getMessage());
|
|
|
+ RangeQueryBuilder builder = new RangeQueryBuilder(fieldName);
|
|
|
+ IllegalArgumentException e2 = expectThrows(IllegalArgumentException.class, ()->builder.relation("disjoint"));
|
|
|
+ assertEquals("[range] query does not support relation [disjoint]", e2.getMessage());
|
|
|
+ builder.relation("contains");
|
|
|
+ assertEquals(ShapeRelation.CONTAINS, builder.relation());
|
|
|
+ builder.relation("within");
|
|
|
+ assertEquals(ShapeRelation.WITHIN, builder.relation());
|
|
|
+ builder.relation("intersects");
|
|
|
+ assertEquals(ShapeRelation.INTERSECTS, builder.relation());
|
|
|
+ }
|
|
|
}
|