может ли запрос относительной даты может быть выполнен на Solr - PullRequest
0 голосов
/ 28 июня 2018

Я работаю с наборами данных 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 голосов
/ 28 июня 2018

Solr поддерживает , используя Date Math в запросах . Чтобы получить что-либо, где created_at не менее 30 минут назад, вы можете использовать:

created_at:[* TO NOW-30MINUTES]

Это вернет все, что было создано не менее 30 минут назад. Использование NOW означает, что запрос не будет кэшироваться (поскольку значение NOW изменяется между каждым запросом), поэтому, если этот запрос выполняется много раз в секунду, вы можете предварительно сгенерировать эти значения в своем контроллере до того, как Solr увидит значения или вы можете использовать параметр запроса NOW=<unix timestamp>, чтобы установить общее значение для всего запроса. Другой вариант - использовать NOW / MINUTE для округления значения до начала текущей минуты.

Чтобы получить все, что было в прошлом (что указывалось в предыдущем примере запроса, но запрос postgresql этого не сделал):

created_at:[* TO NOW]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...