Question

J'ai un champ DateTime standard dans la classe d'entité doctrine basée sur la doctrine:

/**
 * @ORM\Column(type="datetime")
 */
private $occurring;

Ceci génère un objet DateTime et fonctionne comme prévu. Mais un problème se produit lorsque cet objet est intégré à la foselasticasticabundle. En raison des objets DateTime ne prenant pas en charge la méthode __Tostring (), je devais restructurer mon élastica config en utilisant les propriétés afin que la commande de remplissage fonctionne:

mappings:
    id: ~
    occurring:
        properties:
            date: { type: date, format: "yyyy-MM-dd" }

Ceci remplit la date correctement, mais elle se charge dans le format élastique de recherche par défaut et ignore tout formatage personnalisé.

Le problème est que mes requêtes de gamme basées sur ce champ de date ne renvoient pas les résultats escomptés. Le filtre suivant ne renvoie rien même s'il existe des articles dans ElasticsSearch dans cette gamme.

$filteredQuery = new Filtered(
    $mainQuery,
    new Range('occurring', array(
        'gte' => '2013-11-18',
        'lte' => '2014-11-18'
    ))
);

La requête résultante Lorsqu'elle est exécutée directement dans Elasticsearch via Curl retourne les mêmes résultats incorrects.

J'ai remarqué que la modification du paramètre GTE PARAM en 2012 a renvoyé les résultats escomptés de la plage de dates de 2013, donc je me demande si le formatage de la date incorrecte est ce que le filtre arrondi ou quelque chose de similaire?

Des idées? Merci.

Était-ce utile?

La solution

Je l'ai compris avec l'aide de cette réponse: Intersection de la plage de dates Elasticsearch

Pour obtenir la date de la date de travail fonctionne correctement, vous devez combiner deux filtres plutôt que de tenter de le faire en un:

$rangeLower = new Filtered(
    $mainQuery,
    new Range('occurring', array(
        'gte' => '2013-11-13'
    ))
);

$rangeUpper = new Filtered(
    $rangeLower,
    new Range('occurring', array(
        'lte' => '2014-11-14'
    ))
);

$query = new Query($rangeUpper);

Cela donne les résultats corrects bien que je suis sûr qu'il y a un moyen plus élégant de construire la requête.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top