Searchkick gem和belongs_to association

时间:2015-08-13 19:25:10

标签: ruby-on-rails searchkick

在阅读了Searchkick自述文件和一些示例之后,我尝试实现了涉及belongs_to关联的相当简单的搜索。尽管如此,我还没有看到我希望的行为,而且我希望我能错过一些小事......

我有一个属于作者的书模型。我想对图书名称或作者姓名进行搜索。所以,例如,如果我要搜索" Stone"我同时看到了两个" Stone Phillips" (作者)和" A Stone's Throw" (书)。此外,如果我将我的搜索修改为" Stone meadow"它会让Stone Phillips成为作者以及他的着作" My meadow&#34 ;.

我找到了解决第一个例子的方法,但我无法让第二个例子起作用。目前,我有一个简单的pg_search轻松执行上述两个例子,使用" associated_against"方法。虽然我认为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




由于某种原因,此方法不会在作者姓名上返回任何结果。当我使用一个单词搜索时,我只看到相关的书名 - 而且我没有看到任何带有多个单词搜索的结果。

我也尝试将其切换为贯穿作者模型,这似乎更好,因为我得到了书籍和作者的结果。但是,我也得到了很多与之无关的垃圾结果。并且,我仍然只能看到一个单词搜索的结果 - 两个单词搜索没有结果。

我还尝试在控制器代码中添加多个模型索引:



@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进行更改后总是重新编制索引方法。

我希望我已经提供了足够的信息,但如果您有任何问题,请告诉我....我似乎无法弄清楚是什么让我不知所措。非常感谢任何帮助!

1 个答案:

答案 0 :(得分:0)

以下是我们在系统中实现类似内容的方法(注意这是一个精简的提取,所以可能会有一些小的语法问题,但应该得到一般的要点):

[0] => o
[1] => n
[2] => e
[3] => 
[4] => 123
[5] =>
[6] => t
[7] => w
[8] => o

根据我们的经验,这对我们来说效果最好,但您的需求可能需要一些调整。我们还会对冠军赛进行较高的评分,因此如果您愿意,可以省略这种提升。