SOLR туристический сайт: по дате запросов - PullRequest
2 голосов
/ 02 февраля 2012

Я хотел внедрить SOLR для сайта бронирования отелей. Поиск на основе местоположения, названий отелей, объектов работает очень хорошо, как и грани. То, что я не смог выяснить, это как искать отель с учетом дат заезда и отъезда.

Например: пользователь выполнит поиск по поисковому запросу «Отели в Нью-Йорке» и выберет «Дата регистрации»: 10 февраля 2012 г. и «Дата выезда»: 12 февраля 2012 г. в поле выбора даты.

Вот так у меня есть данные -

Hotel_Name 10thFeb2012    11thFEB2012 ........   31DEC2012
Hotel1      2room            3room                  10rooms
Hotel2      1room            4room    ........      12rooms

Теперь, если запрос относится к Hotel2 для 3-х комнат с даты регистрации 10thFeb2012 до 11thFeb2012, он не должен совпадать, поскольку для 10thFeb доступна только одна комната. Если запрос для Hotel2 относится к 1 номеру с даты регистрации 10thFeb2012 до 11thFeb2012, то он должен быть частью результата поиска.

1 Ответ

1 голос
/ 03 февраля 2012

Используйте формат 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 будут понимать дату и время из строк, соответствующих этому формату.

Итак,

  1. хранить данные в БД и Solr с совместимыми форматами даты и времени. (На моей голове у Solr должен быть добавлен Z к дате и времени, иначе он недействителен).
  2. Ваш поисковый интерфейс должен отформатировать все даты в этом формате для запроса запроса.

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.

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