Поэтому, когда я добавляю документы в индекс, поле временной метки выглядит так:"timestamp": "2015-11-03T" />

Фильтр Solr по годам на TrieDateField

solr

1151 просмотра

1 ответ

Моя схема Solr имеет тип tdateполя классаsolr.TrieDateField

<field name="timestamp" type="tdate" indexed="true" stored="true" default="NOW"/>

Поэтому, когда я добавляю документы в индекс, поле временной метки выглядит так:

"timestamp": "2015-11-03T15:52:51.418Z"

Теперь, чтобы отфильтровать все документы текущего года, я добавляю фильтр диапазона к запросу:

/select?q=*:*&fq=timestamp:[NOW/YEAR TO NOW/YEAR+1YEAR}

Но как бы я фильтровал за любой год, скажем, 2014?

Единственное, что я мог придумать, это создать диапазон дат, охватывающий весь год от первой до последней миллисекунды:

/select?q=*%3A*&wt=json&indent=true&fq=timestamp:[2014-01-01T0:00:00.000Z TO 2014-12-31T23:59:59.999Z}

Есть ли способ получить тот же результат, просто передав год в виде четырехзначной строки?

Автор: Richard Osseweyer Источник Размещён: 12.11.2019 09:53

Ответы (1)


0 плюса

Решение

Я полагаю, что после некоторых исследований TrieDateField не сможет отфильтровать данные по годам, кроме предложенного решения. Вам понадобится solr.DateRangeFieldдля этого.

Однако в строку запроса можно добавить один аргумент, сообщающий Solr, как следует понимать NOW, - это epochвремя (миллисекунды), выбранное в году, по которому мы хотим выполнить фильтрацию.

&fq=timestamp:[NOW/YEAR TO NOW/YEAR+1YEAR}&NOW=1388534400000

1388534400000представляет полночь 1 января 2014 года. Но любая другая epochвременная метка, представляющая момент в 2014 году, будет в порядке.

https://cwiki.apache.org/confluence/display/solr/Working+with+Dates

Автор: Richard Osseweyer Размещён: 05.11.2015 12:55
Вопросы из категории :
32x32