Elasticsearch 및 Symfony2의 날짜 범위와 함께 일하고 있습니다
-
26-12-2019 - |
문제
이 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);
.
이것은 쿼리를 건설하는 것이 더 우아한 방법이 더 우아한 것입니다.
제휴하지 않습니다 StackOverflow