我正在尝试获取大于或小于指定日期的文档。
我正在使用下面的searchQuery来实现此目的。
QueryBuilder queryBuilder = QueryBuilders.boolQuery()
.must(QueryBuilders.rangeQuery("date")
.gt("2015-06-25T00:00:00")
.lt("2015-06-25T00:00:00"));
从上面的querybuilder生成的查询是这样的。
{
"bool" : {
"must" : [ {
"range" : {
"date" : {
"from" : "2015-06-25T00:00:00",
"to" : "2015-06-25T00:00:00",
"include_lower" : false,
"include_upper" : false
}
}
}
} ]
}
即使我使用函数 gt和lt of rangequery ,查询也会生成为 from和to 。
解决方案是什么,以便可以像这样生成查询。
{
"bool" : {
"must" : [ {
"range" : {
"date" : {
"gt" : "2015-06-25T00:00:00",
"lt" : "2015-06-25T00:00:00",
"include_lower" : false,
"include_upper" : false
}
}
}
} ]
}
这是我写的测试课。
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = { ElasticSearchConfiguration.class }, loader = AnnotationConfigContextLoader.class)
public class ElasticSearchTest {
@Autowired
private ElasticsearchTemplate elasticsearchTemplate;
@Autowired
private Client client;
@Test
public void testAggregation(){
QueryBuilder querybuilder = QueryBuilders.boolQuery().must(QueryBuilders.rangeQuery("receiptdate").gte("2015-06-25T00:00:00").lte ("2015-07-25T00:00:00")));
final SearchQuery searchQuery = new NativeSearchQueryBuilder()
.withQuery(qb)
.build();
final List<Test> records = elasticsearchTemplate.queryForList(searchQuery, Test.class);
}
}
有关如何在Spring Data Elasticsearch中实现此功能的任何建议都会有所帮助。
答案 0 :(得分:0)
您的查询不会返回任何结果,因为您正在查找严格更高且严格低于同一日期的日期。您需要使用gte
和lte
代替:
QueryBuilder queryBuilder = QueryBuilders.boolQuery()
.must(QueryBuilders.rangeQuery("date")
.gte("2015-06-25T00:00:00")
.lte("2015-06-25T00:00:00"));
range
查询的official parameters为gt
,gte
,lt
和lte
。
from
,to
,include_lower
和include_upper
参数是旧的弃用参数,RangeQueryBuilder
仍在使用但可以(并且将会)随时删除。
只知道:
from
+ include_lower: false
相当于gt
from
+ include_lower: true
相当于gte
to
+ include_upper: false
相当于lt
to
+ include_upper: true
相当于lte