2

我正在尝试获取大于或小于指定日期的文档。

为此,我正在使用下面的 searchQuery。

QueryBuilder queryBuilder = QueryBuilders.boolQuery()  
              .must(QueryBuilders.rangeQuery("date") 
                    .gt("2015-06-25T00:00:00")  
                    .lt("2015-06-25T00:00:00"));

从上面的查询构建器生成的查询是这样的。

{  
  "bool" : {  
    "must" : [ {  
      "range" : {  
        "date" : {  
          "from" : "2015-06-25T00:00:00",  
          "to" : "2015-06-25T00:00:00",  
          "include_lower" : false,  
          "include_upper" : false  
        }  
      }  
    }  
    } ]  
  }

即使我使用rangequery 的函数 gt 和 lt ,查询也会生成为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 中实现这一点的任何建议都会有所帮助。

4

1 回答 1

0

您的查询不会返回任何结果,因为您正在查找严格大于和严格小于同一日期的日期。您需要使用gteandlte来代替:

QueryBuilder queryBuilder = QueryBuilders.boolQuery()  
          .must(QueryBuilders.rangeQuery("date") 
                .gte("2015-06-25T00:00:00")  
                .lte("2015-06-25T00:00:00"));

查询的官方参数是、和。rangegtgteltlte

from和参数是旧的不推荐使用的参数,它们仍在to使用但可以(并且将)随时删除。include_lowerinclude_upperRangeQueryBuilder

只知道:

  • from+include_lower: false相当于gt
  • from+include_lower: true相当于gte
  • to+include_upper: false相当于lt
  • to+include_upper: true相当于lte
于 2016-10-03T05:59:11.553 回答