sql 将运行两个 Insert 一个用于 Account 模型,一个用于 Asset Table
仅供参考,当您想在多个模型之间共享同一个数据库表时,您可以使用 STI,因为它们在属性和行为方面相似。像AdminUser 模型可能具有与PublisherUser 或ReaderUser 几乎相同的属性/列。因此,您可能希望有一个名为users 或模型User 的公用表,并在上述模型之间共享此表。
要点是:ActiveRecord 将运行一个 SQL 查询而不是两个,例如:
INSERT INTO "accounts" ("name", "code", "type") VALUES ('test123', 'test123', 'Asset')
我的问题是如何在更新时重新索引我的模型。带有特定的数据。我可以做 Sunspot.reindex 但这会加载我的 sql 中的所有数据。这会让我变慢
实际上,sunspot_rails 旨在在您对模型/记录进行更改时自动重新索引。它监听savecallbacks。
但是你需要确保你没有使用像update_column(s) 这样的方法。 See the list of silent create/update methods which do not trigger callbacks and validations at all.
另外,你需要了解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
或
# in models; its not considered good though
after_commit do
Sunspot.commit
end
对于手动重新索引,您可以使用 @Kathryn 建议。
但是,我认为您不需要干预自动操作。我认为你没有看到立竿见影的效果,所以你很担心。