Диапазон дат дат с Sunspot в Ruby on Rails - PullRequest
4 голосов
/ 24 февраля 2011

Я использую Sunspot для поиска событий (вечеринок, концертов, ...) в Ruby on Rails 3 приложении.

Мне удалосьнастроить свободный текстовый поиск и поиск фасетов по паре различных типов категорий.

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

Я хочу иметь фасеты, описывающие относительные диапазоны даты / времени , такие как "сегодня", "эти выходные", "следующие выходные" и абсолютные диапазоны даты / времени , например, "Праздник Пасхи 2011", "День Нового Года 2012", ... Диапазоны даты и времени иногда перекрывают друг друга.

Я просматривал документацию по Sunspot API, вики Sunspot, здесьв Stackoverflow читайте и загружайте статьи и блоги.Люди пишут, что этого можно достичь, но я не нахожу примеров или идей реализации, которые бы помогли мне понять, как это сделать.

Есть предложения?

Так как моя проблемане в моем коде, я не публикую ни одного кода.Класс Event имеет экземпляр DateTime с именем «start_time».Я понимаю, что моя работа состоит в том, чтобы определить, когда абсолютные диапазоны даты / времени появляются в каландре.

С наилучшими пожеланиями,

. / Stefan

PS.я новичок?;-) DS

Ответы [ 2 ]

19 голосов
/ 24 февраля 2011

Вы должны настроить свои поля как три временных поля для запросов эффективного диапазона:

class Event
  searchable do
    time :start_time, :trie => true
  end
end

Затем вы можете использовать фасеты запроса к фасету на основе диапазонов:

Event.search do
  facet :start_time do
    bod = Time.zone.now.beginning_of_day
    row :today do
      with :start_time, bod..(bod + 1)
    end
    row :tomorrow do
      with :start_time, (bod + 1)..(bod + 2)
    end
    # etc.
  end
end

Ключпонимание того, что вы можете создавать фасеты, используя произвольные области видимости.Обратите внимание, что имя фасета :start_time просто используется для ссылки на фасет в результатах поиска, а метки строк :today и :tomorrow аналогичным образом используются на стороне клиента для определения количества строк, соответствующих этим запросам;они не имеют смысла с точки зрения Solr, поэтому вы можете называть их как хотите (используя любой тип данных, какой хотите - они не обязательно должны быть символами).

Дополнительная информация о фасетах запроса здесь: http://sunspot.github.com/docs/Sunspot/DSL/FieldQuery.html#facet-instance_method

0 голосов
/ 12 декабря 2013

Вы можете сделать так:

with(:registration_date).between(params[:start_date].to_date..params[:end_date].to_date)

Смотрите здесь: http://sunspot.github.io/docs/Sunspot.html#search-class_method

...