Domanda

Ho un campo DateTime standard nella mia classe di entità basata su Dottrina:

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

Genera un oggetto DateTime e funziona come previsto. Ma un problema si verifica quando questo oggetto è integrato con il foselasmeabundle. A causa degli oggetti DateTime che non supportano il metodo __tostring (), ho dovuto ristrutturare la mia configurazione elastici utilizzando le proprietà in modo che il comando popolare verrà eseguito:

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

Popola la data correttamente ma viene caricata nel formato ELASTICSICSEART predefinito e ignora qualsiasi formattazione personalizzata.

Il problema è che le query della gamma in base a questo campo data non restituiscono i risultati attesi. Il seguente filtro non ritorna nulla anche se ci sono elementi in ELASTICSEARCH all'interno di questo intervallo.

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

La query risultanti quando eseguire direttamente in ELASTICSEARCH tramite Curl restituisce gli stessi risultati errati.

Ho notato che la modifica del Param GTE fino al 2012 ha restituito i risultati attesi nell'intervallo di date 2013, quindi mi chiedo se la formattazione della data errata sta causando il filtro di arrotondare o qualcosa di simile?

Qualche idea? Grazie.

È stato utile?

Soluzione

L'ho capito con l'aiuto di questa risposta: Elasticsearch Data intervallo intersezione

.

Per ottenere intervalli di data di lavoro correttamente, devi combinare due filtri piuttosto che tentare di farlo in 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);
.

Questo dà i risultati corretti anche se sono sicuro che ci sia un modo più elegante di costruire la query.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top