如何创建索引以搜索名字或姓氏(Rails中的Active Admin)

i2loujxw  于 2022-09-21  发布在  Ruby
关注(0)|答案(1)|浏览(122)

我在有过滤器选项的Rails的活动管理中有搜索功能:

filter :profile_display_name_or_profile_firstname_or_profile_lastname_or_email,
         as: :string,
         label: "Search Name/Email"

哪一项生成以下查询

"SELECT COUNT ( * ) FROM accounts LEFT OUTER JOIN profiles ON profiles . account_id = 
accounts . id WHERE ( ( ( profiles . display_name LIKE ? OR profiles . firstname LIKE ? )
 OR profiles . lastname LIKE ? ) OR accounts . email LIKE ? )"

这使得生产中的表现变得更慢。我想加快演出时间。

所以我试着把过滤器分开

filter :profile_display_name_or_profile_firstname_or_profile_lastname,
         as: :string,
         filters: [:starts_with, :equals, :contains, :ends_with],
         label: "Search Name"
  filter :email,
         as: :string,
         filters: [:starts_with, :equals, :contains, :ends_with],
         label: "Search Email"

此外,我还想在First_Name、Last_Name、Display_Name上创建索引

add_index :profiles, %i[firstname lastname displayname],
              name: "index_profiles_on_firstname_and_lastname_and_displayname"

我的问题是,我正在使用名字或姓氏或DisplayName进行搜索,我是否需要一次性或单独索引所有内容。

应该有什么好的解决方案来优化上述问题。谢谢

nnt7mjpx

nnt7mjpx1#

添加此索引

FULLTEXT(display_name, firstname, lastname, lastname, email)

那就去做吧

WHERE MATCH(display_name, firstname, lastname, lastname, email)
      AGAINST('?' IN BOOLEAN MODE)

相关问题