Skip to content

Fix Elasticsearch sorting incorrectly from DB

Dylan Griffith requested to merge 229982-fix-in-page-sort-order into master

What does this MR do?

Closes #229982 (closed)

Before this our search results were getting mixed up within a page. The Records#records method is meant to sort again the query results based on the original Elasticsearch ordering after loading from the DB, but this was not working correctly in our code due to us monkey patching the elasticsearch-model Gem and changing the value of _id for Elasticsearch records.

As such we needed to dig ourselves further into the monkey patch hole. This MR replaces a single line inside Records#records method, which, unfortunately, required us to replace the entire lengthy method.

The diff for this monkey patch is simply:

                   if !self.order_values.present?
+                    # BEGIN_MONKEY_PATCH
+                    #
+                    # Monkey patch sorting because we monkey patch ids and the
+                    # previous code uses `hit['_id']` which does not match our
+                    # record.id. We instead need `hit['_source']['id']`.
-                    @records.sort_by { |record| hits.index { |hit| hit['_id'].to_s == record.id.to_s } }
+                    @records.sort_by { |record| hits.index { |hit| hit['_source']['id'].to_s == record.id.to_s } }
+                    # END_MONKEY_PATCH
                   else
                     @records
                   end

Screenshots

Does this MR meet the acceptance criteria?

Conformity

Availability and Testing

Security

If this MR contains changes to processing or storing of credentials or tokens, authorization and authentication methods and other items described in the security review guidelines:

  • Label as security and @ mention @gitlab-com/gl-security/appsec
  • The MR includes necessary changes to maintain consistency between UI, API, email, or other methods
  • Security reports checked/validated by a reviewer from the AppSec team

#229982 (closed)

Edited by John McGuire

Merge request reports