2017-07-03 9 views
0

日付範囲を使用する際に問題が発生しました。私は、次のコードスニペットを持っている:elasticsearchの日付範囲が多すぎる結果を返します

const ISO8601_FROM = 'Y-m-d\TH:i:s+1200'; 
const ISO8601_TO = 'Y-m-d\TH:i:s-1200'; 

$dateRange = new RangeBuilder(); 
if ($this->filterDateFrom instanceof \DateTime) { 
    $dateRange->from($this->filterDateFrom 
     ->setTime(0, 0, 0) 
     ->format(self::ISO8601_FROM) 
    ); 
} 
if ($this->filterDateTo instanceof \DateTime) { 
    $dateRange->to($this->filterDateTo 
     ->setTime(23, 59, 59) 
     ->format(self::ISO8601_TO) 
    ); 
} 
if ($dateRange->isValid()) { 
    $boolQuery->addMust(new Range('dateCreate', $dateRange->buildRange())); 
} 

私RangeBuilderが返すJSON文字列の一部である:

"range" : { 
    "dateCreate" : { 
     "gte" : "2000-01-01T00:00:00+1200", 
     "lte" : "2000-01-01T23:59:59-1200" 
    } 
} 

あなたは私が1月1日からの結果を得たい見ることができるように。
私の問題は、今も1月2日のドキュメントを取得することです。

_mappingは少し広範囲ですので、私は唯一のブロックの先頭を掲載します:あなたは、クエリとインデックスマッピングで同じタイムゾーンを使用しないように

{"myindex":{"mappings":{"tdo":{"properties":{"author":{"type":"text","fields":{"keyword":{"type":"keyword","ignore_above":256}}},"client":{"type":"text","fields":{"keyword":{"type":"keyword","ignore_above":256}}},"content":{"type":"text","fields":{"keyword":{"type":"keyword","ignore_above":256}}},"dateCreate":{"type":"date"},"documents":{"type":"text","fields":{"keyword":{"type":"keyword","ignore_above":256}}},"id":{"type":"text","fields":{"keyword":{"type":"keyword","ignore_above":256}}},... 
+0

'dateCreate'フィールドのタイプは何ですか?インデックスマッピングで確認してください。 – Roopendra

+0

タイプは「日付」です。 – altralaser

+0

さて、[公式文書](https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-range-query.html)に記載されている日付形式で試しましたか? – Roopendra

答えて

0

をそれはそうです。

あなたのマッピング情報とあなたが得ることを望んでいない1つのヒントの1つを投稿すると、もっと役立つかもしれません。

+0

あなたのすべての文書は 'dateCreate'フィールドに" +1200 "を持っていますか? (ちなみに、 "lte"の部分は "2000-01-01T23:59:59-1200"に手書きのエラーがあると思います) – fmyblack

+0

あなたの右。すべての文書に+1200オフセットがあるわけではないようです。とにかくこれらの文書を入手する可能性はありますか? – altralaser

+0

スクリプトクエリは 'doc ['dateCreate']。length()<24'のように見えます。 – fmyblack

関連する問題