php-在Elasticsearch和Symfony2中使用日期范围
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了php-在Elasticsearch和Symfony2中使用日期范围,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1336字,纯文字阅读大概需要2分钟。
内容图文
![php-在Elasticsearch和Symfony2中使用日期范围](/upload/InfoBanner/zyjiaocheng/678/356c541e5da94bd4ad99b812f1c37503.jpg)
我在基于Doctrine的实体类中有一个标准的Datetime字段:
/**
* @ORM\Column(type="datetime")
*/
private $occurring;
这将生成一个DateTime对象,并按预期方式工作.但是,当此对象与FOSElasticaBundle集成在一起时,就会出现问题.由于DateTime对象不支持__toString()方法,因此我不得不使用这些属性来重构Elastica配置,以便populate命令可以运行:
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中运行时,结果查询返回相同的错误结果.
我确实注意到,将gte参数更改为2012返回了2013年日期范围内的预期结果,所以我想知道日期格式不正确是否会导致过滤器四舍五入或类似?
有任何想法吗?谢谢.
解决方法:
我在以下答案的帮助下找到了答案:Elasticsearch date range intersection
为了使日期范围正常运行,您必须结合使用两个过滤器,而不是尝试将其组合在一起:
$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);
尽管我敢肯定有一种构造查询的更优雅的方法,但这可以给出正确的结果.
内容总结
以上是互联网集市为您收集整理的php-在Elasticsearch和Symfony2中使用日期范围全部内容,希望文章能够帮你解决php-在Elasticsearch和Symfony2中使用日期范围所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。