Pregunta

Tengo un campo de datos estándar en mi clase de entidad basada en la doctrina:

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

Esto genera un objeto DateTime y funciona como se esperaba. Pero se produce un problema cuando este objeto está integrado con el FoselasticAbundle. Debido a los objetos de DateTime, que no son compatibles con el método __Tostring (), tuve que reestructurar mi configuración de Elastica utilizando las propiedades para que se ejecute el comando PAPULATE:

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

Esto llena correctamente la fecha, pero se carga en el formato de elastics de predeterminado y ignora cualquier formato personalizado.

El problema es que mis consultas de rango basadas en este campo de fecha no devuelven los resultados esperados. El siguiente filtro no devuelve nada, aunque hay artículos en elasticsearch dentro de este rango.

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

La consulta resultante cuando se ejecuta directamente en ElasticSearch A través de CURL devuelve los mismos resultados incorrectos.

¿Noté que cambiar el GTE PARAM a 2012 devolvió los resultados esperados en el rango de fecha de 2013, por lo que me pregunto si el formato de fecha incorrecto está causando que el filtro redondear o algo similar?

¿Alguna idea? Gracias.

¿Fue útil?

Solución

Me di cuenta de esto con la ayuda de esta respuesta: Elasticsearch Fecha Rango Intersección

Para obtener rangos de fecha funcionar correctamente, debe combinar dos filtros en lugar de intentar hacerlo en uno:

$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);

Esto da los resultados correctos, aunque estoy seguro de que hay una forma más elegante de construir la consulta.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top