0

J'essaie d'extraire des documents qui sont plus ou moins longs que la date spécifiée. J'utilise le searchQuery ci-dessous à cette fin.Données de ressort Elasticsearch pour extraire Les documents entre deux dates génèrent une requête erronée

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

La requête générée à partir du constructeur de requêtes ci-dessus est semblable à ceci.

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

Même quand j'utiliser les fonctions gt et lt de rangequery la requête est générée comme de et à.

Quelle est la solution pour qu'une requête puisse être générée comme ceci.

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

C'est la classe de test que j'ai écrite. Toute suggestion sur la façon d'y parvenir dans Spring Data Elasticsearch serait utile.

Répondre

0

Votre requête ne retournera aucun résultat, puisque vous recherchez des dates strictement plus grandes et strictement inférieures à la même date. Vous devez utiliser à la place gte et lte:

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

Le official parameters de la requête range sont gt, gte, lt et lte.

Les from, to, include_lower et include_upper paramètres sont anciens paramètres dépréciées, que le RangeQueryBuilder utilise encore, mais peut (et) sont révocables à tout moment.

sais juste que:

  • from + include_lower: false est équivalent à gt
  • from + include_lower: true est équivalent à gte
  • to + include_upper: false est équivalent à lt
  • to + include_upper: true est équivalent à lte
+0

Merci pour la réponse. J'ai essayé cette requête mais je n'ai pas récupéré les enregistrements du serveur. C'est la requête ** QueryBuilder qb = QueryBuilders.boolQuery(). Must (QueryBuilders.rangeQuery ("receiptdate"). Gte ("2015-06-25T00: 00: 00"). Lte ("2015-07-25T00: 00:00 ")) ** – sumanth

+0

Pouvez-vous montrer un document qui devrait être retourné? – Val

+0

Ceci est un exemple JSON { "_index": "test", "_type": "test", "_id": "1015", "_version": 1, "_SCORE": 1, "_source": { "id": "1015", "createdDate": "2015-07-16T00: 00: 00.000Z ", " numéro de reçu ":" 10150000187831 ", " mode de paiement ":" espèces ", " receiptdate ":" 2015-07-16T00: 00: 00.000Z ", " installmentfrom ":" 2015-04-01 », "installmentto": "30.09.2015", "reductionamount": null, "receiptcreator": "" }} – sumanth