DEV: Improve readability of setting weights in `SearchIndexer`.

DEV: Improve readability of setting weights in SearchIndexer.

diff --git a/app/services/search_indexer.rb b/app/services/search_indexer.rb
index 4c0ac81..8eb16ca 100644
--- a/app/services/search_indexer.rb
+++ b/app/services/search_indexer.rb
@@ -21,7 +21,9 @@ class SearchIndexer
     HtmlScrubber.scrub(html, strip_diacritics: strip_diacritics)
   end
 
-  def self.update_index(table: , id: , raw_data:)
+  def self.update_index(table: , id: , a_weight: nil, b_weight: nil, c_weight: nil, d_weight: nil)
+    raw_data = [a_weight, b_weight, c_weight, d_weight]
+
     search_data = raw_data.map do |data|
       Search.prepare_data(data || "", :index)
     end
@@ -85,37 +87,64 @@ class SearchIndexer
 
     table_name.camelize.constantize.upsert(params)
   rescue => e
-    # TODO is there any way we can safely avoid this?
-    # best way is probably pushing search indexer into a dedicated process so it no longer happens on save
-    # instead in the post processor
-    Discourse.warn_exception(
-      e,
-      message: "Unexpected error while indexing #{table} for search"
-    )
+    if Rails.env.test?
+      raise
+    else
+      # TODO is there any way we can safely avoid this?
+      # best way is probably pushing search indexer into a dedicated process so it no longer happens on save
+      # instead in the post processor
+      Discourse.warn_exception(
+        e,
+        message: "Unexpected error while indexing #{table} for search"
+      )
+    end
   end
 
   def self.update_topics_index(topic_id, title, cooked)
-    scrubbed_cooked = scrub_html_for_search(cooked)[0...Topic::MAX_SIMILAR_BODY_LENGTH]
-
     # a bit inconsitent that we use title as A and body as B when in
     # the post index body is D
-    update_index(table: 'topic', id: topic_id, raw_data: [title, scrubbed_cooked])
+    update_index(
+      table: 'topic',
+      id: topic_id,
+      a_weight: title,
+      b_weight: scrub_html_for_search(cooked)[0...Topic::MAX_SIMILAR_BODY_LENGTH]
+    )
   end
 
   def self.update_posts_index(post_id, topic_title, category_name, topic_tags, cooked)
-    update_index(table: 'post', id: post_id, raw_data: [topic_title, category_name, topic_tags, scrub_html_for_search(cooked)])
+    update_index(
+      table: 'post',
+      id: post_id,
+      a_weight: topic_title,
+      b_weight: category_name,
+      c_weight: topic_tags,
+      d_weight: scrub_html_for_search(cooked)
+    )
   end
 
   def self.update_users_index(user_id, username, name)
-    update_index(table: 'user', id: user_id, raw_data: [username, name])
+    update_index(
+      table: 'user',
+      id: user_id,
+      a_weight: username,
+      b_weight: name
+    )
   end
 
   def self.update_categories_index(category_id, name)
-    update_index(table: 'category', id: category_id, raw_data: [name])
+    update_index(
+      table: 'category',
+      id: category_id,
+      a_weight: name
+    )
   end
 
   def self.update_tags_index(tag_id, name)
-    update_index(table: 'tag', id: tag_id, raw_data: [name.downcase])
+    update_index(
+      table: 'tag',
+      id: tag_id,
+      a_weight: name.downcase
+    )
   end
 
   def self.queue_category_posts_reindex(category_id)

GitHub sha: 8b811533

1 Like