#ruby-on-rails #ruby #search #elasticsearch #elasticsearch-rails
#ruby-on-rails #ruby #Поиск #elasticsearch #elasticsearch-rails
Вопрос:
У меня есть индексированное поле, определенное как, :date
это метод определения того, какой DateTime
объект хранить.
settings index: { number_of_shards: 1 } do
mapping do
...
indexes :date, index: :not_analyzed, type: 'date'
...
end
end
И в моем as_indexed_json
У меня он указан в :methods
def as_indexed_json(options = {})
self.as_json(
...
methods: [:full_text, :tag_list, :category_list, :date, :month, :year],
...
)
end
Он правильно индексирует желаемое значение как "date": "2016-05-19T09:43:09-04:00"
но когда я считываю значение после поиска, дата возвращается как класс String
вместо любого из классов date.
Я поработал с некоторыми из доступных format
значений в этом поле, таких как date_time_no_millis
, strict_ date_time_no_millis
и "yyyy-MM-dd'T'HH:mm:ssZ"
, но, похоже, это только корректирует настройку и понимание значения, а не их чтение и гидратацию по классам.
Как я могу заставить это date
значение считываться обратно как Rails DateTime
, поскольку оно существует в моей базе данных?
Ранее публиковался как проблема с Github без ответа.
Ответ №1:
Вы спрашиваете, как преобразовать строку в значение datetime в Rails?
> "2016-05-19T09:43:09-04:00".to_datetime
=> Thu, 19 May 2016 09:43:09 -0400
Комментарии:
1. Нет, я спрашиваю, почему это еще не сделано elasticsearch-rails
Ответ №2:
Если я правильно понимаю вопрос, вам нужно будет преобразовать поле даты из String
в DateTime
только в вашем приложении ruby.
Elasticsearch хранит _source как JSON, а у JSON нет типа данных date, поэтому вам пришлось бы вызывать метод для строки, который преобразует его обратно в datetime. Вы могли бы обратиться к документации, чтобы увидеть, как даты хранятся в ES.
Комментарии:
1. Все остальные объекты преобразуются в соответствующие им объекты rails. Строка, хэши и т.д… Мое приложение Rails знает, как сопоставить значения с индексом с помощью elasticsearch-rails, предполагается, что оно также знает, как сопоставить обратно, но это не так