Commit 87774303bad05c1636fd4658ee3fcd3339d9343f

Authored by Andrew Kane
1 parent dda43093

Improved performant conversions example [skip ci]

Showing 1 changed file with 16 additions and 6 deletions   Show diff stats
README.md
... ... @@ -1602,10 +1602,12 @@ add_column :products, :search_conversions, :jsonb
1602 1602  
1603 1603 For MySQL, use `:json`, and for others, use `:text` with a [JSON serializer](https://api.rubyonrails.org/classes/ActiveRecord/AttributeMethods/Serialization/ClassMethods.html).
1604 1604  
1605   -Create a separate method so you can use partial reindexing.
  1605 +Next, update your model, Create a separate method for conversion data so you can use [partial reindexing](#partial-reindexing).
1606 1606  
1607 1607 ```ruby
1608 1608 class Product < ApplicationRecord
  1609 + searchkick conversions: [:conversions]
  1610 +
1609 1611 def search_data
1610 1612 {
1611 1613 name: name
... ... @@ -1620,11 +1622,13 @@ class Product &lt; ApplicationRecord
1620 1622 end
1621 1623 ```
1622 1624  
1623   -Create a job to update the column and reindex records with new conversions.
  1625 +Deploy and reindex your data. For zero downtime deployment, temporarily set `conversions: false` in your search calls until the data is reindexed.
  1626 +
  1627 +To populate conversions, create a job to update the column and reindex records with new conversions.
1624 1628  
1625 1629 ```ruby
1626 1630 class ReindexConversionsJob < ApplicationJob
1627   - def perform(class_name, since)
  1631 + def perform(class_name, since: nil, reindex: true)
1628 1632 # get records that have a recent conversion
1629 1633 recently_converted_ids =
1630 1634 Searchjoy::Conversion.where(convertable_type: class_name).where(created_at: since..)
... ... @@ -1652,8 +1656,8 @@ class ReindexConversionsJob &lt; ApplicationJob
1652 1656 end
1653 1657 end
1654 1658  
1655   - # partial reindex
1656   - model.where(id: ids).reindex(:conversions_data)
  1659 + # reindex conversions data
  1660 + model.where(id: ids).reindex(:conversions_data) if reindex
1657 1661 end
1658 1662 end
1659 1663 end
... ... @@ -1662,7 +1666,13 @@ end
1662 1666 Run the job with:
1663 1667  
1664 1668 ```ruby
1665   -ReindexConversionsJob.perform_later("Product", 1.day.ago)
  1669 +ReindexConversionsJob.perform_later("Product")
  1670 +```
  1671 +
  1672 +And set it up to run daily.
  1673 +
  1674 +```ruby
  1675 +ReindexConversionsJob.perform_later("Product", since: 1.day.ago)
1666 1676 ```
1667 1677  
1668 1678 ## Advanced
... ...