sql будет запускать две вставки: одну для модели учетной записи и одну для таблицы активов.
К вашему сведению, вы используете STI, когда хотите использовать одну и ту же таблицу базы данных между несколькими моделями, потому что они похожи по атрибутам и поведению. Подобная модель AdminUser
, вероятно, будет иметь почти те же атрибуты/столбцы, что и PublisherUser
или ReaderUser
. Поэтому вы можете захотеть иметь общую таблицу с именем users
или модель User
и использовать эту таблицу среди вышеупомянутых моделей.
Смысл в том, что ActiveRecord будет выполнять один SQL-запрос, а не два, например:
INSERT INTO "accounts" ("name", "code", "type") VALUES ('test123', 'test123', 'Asset')
мой вопрос в том, как я могу переиндексировать свою модель при обновлении. с конкретными данными. я могу сделать Sunspot.reindex, но это загрузит все данные в мой sql. это заставит меня замедлиться
На самом деле sunspot_rails
предназначен для автоматической переиндексации всякий раз, когда вы вносите изменения в свою модель/запись. Он прослушивает save
обратные вызовы.
Но вам нужно убедиться, что вы не используете такие методы, как update_column(s)
. См. список автоматических методов создания/обновления, которые не вызывают обратные вызовы и проверки. вообще.
Кроме того, вам необходимо понимать концепцию batch size
с точки зрения Solr. По соображениям производительности все ваши новые индексы не фиксируются немедленно. Committed означает запись индексов в базу данных, как в RDBMS.
По умолчанию batch_size
для коммитов составляет 50. Это означает, что после 50 index
выполнения метода будут зафиксированы только индексы, и вы сможете искать записи. Чтобы изменить его, используйте следующее
# in config/initializers/sunspot_config.rb
Sunspot.config.indexing.default_batch_size = 1 # or any number
or
# in models; its not considered good though
after_commit do
Sunspot.commit
end
Для переиндексации вручную вы можете использовать предложенный @Kathryn.
Но, я не думаю, что вам нужно вмешиваться в автооперацию. Я думаю, что вы не видели немедленных результатов, поэтому вы беспокоились.
person
illusionist
schedule
18.06.2017