elasticsearch上的日期范围返回太多结果
我在使用日期范围时遇到了问题。我有下面的代码片段: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”字段中都有“+1200”。 (顺便说一下,我猜部分''lte“:”2000-01-01T23:59:59-1200“'有一个手写错误) – fmyblack
嗯,你的权利。看起来不是每个文档都有+1200偏移量。无论如何,是否有可能获得这些文件? – altralaser
你可以使用脚本查询,就像'doc ['dateCreate'] .length() fmyblack
'dateCreate'字段的类型是什么?请在您的索引映射中检查它。 – Roopendra
它是“日期”类型。 – altralaser
好的,您是否使用[官方文档](https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-range-query.html)中给出的日期格式尝试过? – Roopendra