可以在Solr上执行相对日期查询

时间:2018-06-28 16:51:42

标签: solr

我正在使用Solr数据集。我在想是否有一种方法可以查询(日期查询),使其相对于每个记录日期字段

进一步解释。

每个记录都有一个date字段,我需要的是日期已经超过30分钟窗口的所有记录的列表。

只是如何操作

我具有形式的JSON结构,并且已在created_at上应用索引

{id: 1, created_at: "2018-06-28T:00:00:00Z"}
{id: 2, created_at: "2018-06-28T:00:01:00Z"}
{id: 3, created_at: "2018-06-28T:00:02:00Z"}
{id: 4, created_at: "2018-06-28T:00:10:00Z"}

比方说,如果我在00:33查询,我将返回3条记录。

{id: 1, created_at: "2018-06-28T:00:00:00Z"}
{id: 2, created_at: "2018-06-28T:00:01:00Z"}
{id: 3, created_at: "2018-06-28T:00:02:00Z"}

如果我在00:41查询,它应该返回4条记录。

{id: 1, created_at: "2018-06-28T:00:00:00Z"}
{id: 2, created_at: "2018-06-28T:00:01:00Z"}
{id: 3, created_at: "2018-06-28T:00:02:00Z"}
{id: 4, created_at: "2018-06-28T:00:10:00Z"}

进一步解释这一点。如果我必须在PostgreSQL中做同样的事情,我可以尝试一下。

select * from [table] where now() - created_at > interval '30 minute'

1 个答案:

答案 0 :(得分:0)

Solr支持using Date Math in queries。 要检索<VirtualHost *:80> DocumentRoot "C:/Bitnami/wamp/apache2/htdocs/myapp/public" ServerName siteagent.test <Directory "C:/Bitnami/wamp/apache2/htdocs/myapp/public"> Options Indexes FollowSymLinks AllowOverride all Require local </Directory> </VirtualHost> 至少在30分钟前的内容,可以使用:

created_at

这将返回至少30分钟前创建的任何内容。使用created_at:[* TO NOW-30MINUTES] 意味着查询将不会被缓存(因为NOW的值在每个请求之间都会改变),因此,如果此查询每秒运行多次,则可以在Solr看到之前在控制器中预生成这些值值,也可以使用查询参数NOW在所有请求中设置一个公共值。另一种选择是使用NOW / MINUTE将值四舍五入到当前分钟的开始。

要获取过去的所有内容(这是您先前的查询示例所指示的内容,但postgresql查询没有):

NOW=<unix timestamp>