ruby-on-rails - 搜索踢铁轨 5
问题描述
快一个。
我正在使用 Searchkick gem 在我的 Rails 应用程序中进行搜索。我注意到如果我尝试在 Post 模型中搜索一些文本,它工作正常。
一切都设置正确,但是说我想搜索帖子的作者。它的示例关系是 Post.user.name
当我搜索“用户名”时,我没有得到任何结果。我怀疑这与 User 模型中的数据而不是 Post 模型中的数据有关,但在我的 Post 视图中,我可以将其视为字符串。
这是我想念的简单东西吗?我想添加
searchkick 继承:真
到我的 Post 模型并重新索引 Post 和 User 模型然后它会工作但没有任何改变。
有任何想法吗?谢谢。
解决方案
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。有关这方面的更多信息,请参阅文档。
推荐阅读
- java - 如何正确使用 Gson.getAdapter(Class ) 和 TypeAdapter.write 与泛型?
- java - 具有对象锁定机制的 Amazon S3 数据一致性模型
- r - 如何在用户定义的函数中从数据集中对列进行子集化?
- firebase - 如何使用 Firestore 在 Flutter 中更新密码
- git - 格式化电脑后,Git push 没有响应
- java - WriteValueAsString Jackson 将附加属性显示为具体字段
- c# - “多次安装 MSBuild”时,Dotnet 项目转换 try-convert 失败
- c++ - 如何在类对象上获取用户输入
- ios - Visual Studio 2019 Xamarin Apple 帐户中缺少 iOS 分发证书,它位于苹果开发人员帐户中,已导入配置文件
- wordpress - 从谷歌取消索引旧网站(旧域名)