Если пара день/месяц каверзная (я не знаю, так это или нет), почему бы не добавить поле «их день рождения в 1980 году» (жили они тогда или нет). Затем вам просто нужно выполнить поиск по 1980 году. Это фактически пара день/месяц, но сохраненная в виде, который вы можете легко использовать.
Обратите внимание, что 1980 год — високосный, поэтому я и выбрал его — иначе было бы трудно представить тех, у кого день рождения 29 февраля.
Альтернативно, пара «день/месяц» в виде целого числа:
(100 * month) + day
даст вам простое представление, которое будет легко искать и индексировать. Обычно я обнаруживал, что хранить данные в одном поле проще, чем использовать два поля. С другой стороны, я никогда не использовал Solr...
EDIT: У меня есть другая идея. Немного душновато, но даже так...
Сохраните дату рождения в формате, который фактически представляет собой месяц, день, год. Я не знаю, может ли Solr легко сделать это в формате MM/dd/yyyy, а затем выполнить поиск по лексикографическому порядку, но альтернативой является
(100000 * month) + (1000 * dayOfMonth) + (year - 1900)
(Предполагается, что вам не нужно хранить даты рождения ранее 1900 года. Я уверен, что вы можете настроить его.)
Вы по-прежнему можете восстановить исходную дату рождения, но порядок будет в порядке дня рождения, когда самый старший человек будет первым для любой конкретной даты.
Однако это означает, что трудно сортировать людей по их фактическому возрасту. Я не знаю, является ли это проблемой для вас.
В любом случае, как я уже сказал, это немного необычно, но это может помочь :)
person
Jon Skeet
schedule
31.03.2009