我在使用日期範圍時遇到了問題。我有下面的代碼片段: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()));
}
JSON字符串我RangeBuilder將返回是的一部分:
"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}}},...
'dateCreate'字段的類型是什麼?請在您的索引映射中檢查它。 – Roopendra
它是「日期」類型。 – altralaser
好的,您是否使用[官方文檔](https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-range-query.html)中給出的日期格式嘗試過? – Roopendra