繁体   English   中英

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

[英]How to create a index to search firstname or last name (Active Admin in rails)

我在具有过滤器选项的 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"

我的问题是我正在使用名字或姓氏或显示名进行搜索,我是否需要全部索引一次或单独索引。

什么应该是优化上述查询的好解决方案。谢谢

添加此索引

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

然后做

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM