Используйте формат ISO 8601 для даты и времени.
Complete date plus hours, minutes, seconds and a decimal fraction of a second
YYYY-MM-DDThh:mm:ss.sTZD (eg 1997-07-16T19:20:30.45Z)
И ваша база данных, и Solr будут понимать дату и время из строк, соответствующих этому формату.
Итак,
- хранить данные в БД и Solr с совместимыми форматами даты и времени. (На моей голове у Solr должен быть добавлен
Z
к дате и времени, иначе он недействителен).
- Ваш поисковый интерфейс должен отформатировать все даты в этом формате для запроса запроса.
Solr может делать условные выражения, фасеты, фасетирование диапазона диапазона и т. Д. С датами.
Я бы пошел со следующей схемой:
hotel_name : string (for faceting)
hotel_name_searchable : text (for searching, this is a copy field:look it up)
room_id : string
start_date : date (when the room is availabe)
end_date : date (if not booked, set it to an infinite date, say 2040)
Для каждой комнаты, которую вы когда-либо отслеживаете, сохраняйте дату и время, когда она свободна.
Вы можете искать комнаты между start_date и end_date.
Делайте огранку на hotel_name
, поэтому ваш поиск номеров "Дата регистрации с 10thth2012 по 11thFeb2012" дает вам:
Hotel1:[r1,r2,r3]
Hotel2:[r8]
Hotel3:[r2,r3,r4]
При использовании фильтра hotel_name
для одного отеля, facet.mincount
на room_id
можно вернуть отели с необходимым количеством номеров.
Небольшое предупреждение: возможно, я немного заржавел, так как раньше я сам много обрабатывал результаты Solr.