2

指定された日付よりも大きいまたは小さいドキュメントをフェッチしようとしています。

この目的のために、以下の 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  
        }  
      }  
    }  
    } ]  
  }

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

同じ日付より厳密に大きい日付と厳密に小さい日付を探しているため、クエリは結果を返しません。代わりにgteandを使用する必要があります。lte

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 に答える