首页 > 解决方案 > 搜索踢铁轨 5

问题描述

快一个。

我正在使用 Searchkick gem 在我的 Rails 应用程序中进行搜索。我注意到如果我尝试在 Post 模型中搜索一些文本,它工作正常。

一切都设置正确,但是说我想搜索帖子的作者。它的示例关系是 Post.user.name

当我搜索“用户名”时,我没有得到任何结果。我怀疑这与 User 模型中的数据而不是 Post 模型中的数据有关,但在我的 Post 视图中,我可以将其视为字符串。

这是我想念的简单东西吗?我想添加

searchkick 继承:真

到我的 Post 模型并重新索引 Post 和 User 模型然后它会工作但没有任何改变。

有任何想法吗?谢谢。

标签: ruby-on-railselasticsearchsearchkick

解决方案


Searchkick 由 ElasticSearch 提供支持。所有的搜索都发生在那里 - 而不是你的数据库。您需要以某种方式将要搜索的数据获取到 ElasticSearch 中。Searchkick 通过使用 search_data 方法 ( https://github.com/ankane/searchkick#indexing ) 索引您的数据来提供此功能。因此,如果您的关联具有要搜索的字段,则可以按照类似于 Searchkick 的 Github 页面上的示例进行操作,并执行(针对您的情况):

class Post

  belongs_to :author, class_name: 'User' # or whatever your association is

  def search_data
    {
       title: title,
       author_name: author.name
    }
  end
end

之后不要忘记重新索引,这样您就可以看到结果。

Post.reindex

并且不要忘记,如果您的关联数据发生更改,例如如果您的作者姓名从 Bob 变为 Robert,则数据不会自动同步。您需要手动调用 Post.reindex,或者在 Author 上设置 after_commit 挂钩,当作者更改时调用重新索引 Post。有关这方面的更多信息,请参阅文档。


推荐阅读