在遵循 Searchkick 自述文件和一些示例之后,我尝试实现一个涉及 belongs_to 关联的相当简单的搜索。不过,我没有看到我希望的行为,我希望我只是错过了一些小东西......
我有一个属于作者的图书模型。我想启用对书名或作者姓名的搜索。因此,例如,如果我要搜索“Stone”,我会同时看到“Stone Phillips”(作者)和“A Stone's Throw”(书籍)。此外,如果我将搜索修改为“Stone meadow”,它将返回 Stone Phillips 作为作者以及他的书名为“我的草地”。
我找到了解决第一个示例的方法,但我无法让第二个示例工作。目前,我有一个简单的 pg_search 可以轻松地执行上述两个示例,使用“关联_反对”方法。虽然我认为 Searchkick 提供了这么简单的东西,但我似乎无法让它工作......
我尝试过的主要方法:
在我的控制器中
@search = Book.search params[:query],
limit: 30,
fields: [:book_name, :author_name],
misspellings: false
在我的模型中(首先只是“search_data”方法;后来添加了范围......)
scope :search_import, -> { includes(:author) }
def search_data
{
book_name: book_name,
author_name: author(&:author_name)
}
end
由于某种原因,这种方法不会返回任何关于作者姓名的结果。当我使用一个词搜索时,我只看到相关的书名——而且我没有看到多个词搜索的任何结果。
我还尝试将其切换为通过 Author 模型运行,这似乎效果更好,因为我得到了书籍和作者的结果。但是,我也得到了很多不相关的垃圾结果。而且,我仍然只看到一个词搜索的结果——两个词搜索没有结果。
我还尝试将多个模型索引添加到我的控制器代码中:
@search = Book.search params[:query],
limit: 30,
index_name: [Book.searchkick_index.name, Author.searchkick_index.name],
fields: [:book_name, :author_name],
misspellings: false
这实际上为一个单词提供了最好的结果集。它返回所有预期的书名和作者姓名,没有所有垃圾。但是当我尝试添加第二个词来缩小搜索范围时,我没有得到任何结果......
我已经尝试了一些其他小的更改,使用来自其他帖子、tutos 等的建议。而且,如果有人想知道,我总是在更改 search_data 或 searchkick 方法后重新索引。
我希望我已经提供了足够的信息,但是如果您有任何问题,请告诉我......我似乎无法弄清楚我在逃避什么。任何帮助深表感谢!