문제

이 Doctrine 기반 엔티티 클래스에 표준 DateTime 필드가 있습니다.

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

DateTime 객체를 생성하고 예상대로 작동합니다. 그러나이 객체가 foselasticAbundle과 통합 될 때 문제가 발생합니다. __tostring () 메소드를 지원하지 않는 DateTime 객체로 인해 Propulate 명령이 실행되도록 속성을 사용하여 Elastica Config를 재구성해야했습니다.

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

이것은 날짜를 올바르게 채우지 만 기본 elasticsearch 형식으로로드되고 사용자 정의 서식을 무시합니다.

이 날짜 필드를 기반으로 한 내 범위 쿼리는 예상 결과를 반환하지 않는다는 것입니다. 다음 필터는이 범위 내에서 Elasticsearch 항목이 있더라도 아무 것도 반환합니다.

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

CURL을 통해 elasticsearch에서 직접 실행할 때 결과 쿼리는 동일한 잘못된 결과를 반환합니다.

2012 년까지 GTE Param을 변경하면 2013 년 날짜 범위에서 예상 결과를 반환 했으므로 잘못된 날짜 포맷이 필터가 반올림하거나 비슷한 것을 원인이되는지 궁금합니다.

아이디어가 있습니까? 감사.

도움이 되었습니까?

해결책

이 답변의 도움으로 이것을 알아 냈습니다. Elasticsearch 날짜 범위 교차점 P>

날짜 범위를 올바르게 작동하려면 다음을 수행하지 않고 두 개의 필터를 결합해야합니다.

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

이것은 쿼리를 건설하는 것이 더 우아한 방법이 더 우아한 것입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top