Pergunta

Eu tenho um padrão de campo de data / hora na minha Doutrina baseada em entidade de classe:

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

Isso gera um objeto DateTime e funciona como esperado.Mas ocorre um problema quando esse objeto é integrado com o FOSElasticaBundle.Devido a data e hora de objetos de não apoiar o __método toString (), tive de reestruturar minha Elastica de configuração usando as propriedades para que o preencher comando será executado:

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

Isso preenche a data corretamente, mas ele carrega no padrão Elasticsearch formato e ignora qualquer formatação personalizada.

O problema é que a minha intervalo de consultas baseado neste campo de data não retornar os resultados esperados.O seguinte filtro retorna nada até que haja itens no Elasticsearch dentro deste intervalo.

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

A consulta resultante quando executados diretamente no Elasticsearch via curl retorna os mesmos resultados incorretos.

Fiz notar que a mudança do gte param para 2012 devolvidos os resultados esperados em 2013 intervalo de data, então eu estou querendo saber se a data incorreta de formatação está a causar o filtro para arredondar para cima ou algo semelhante?

Qualquer idéias?Obrigado.

Foi útil?

Solução

Achei isso com a ajuda da sua resposta: Elasticsearch intervalo de data de intersecção

Para obter intervalos de data funcionar corretamente, você terá que combinar dois filtros em vez de tentar fazê-lo em:

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

Isto dá os resultados corretos, embora eu tenho certeza que há uma forma mais elegante de construção da consulta.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top