Searchkick搜索没有或至少有一个关联对象的模型

时间:2018-02-08 22:38:51

标签: ruby-on-rails elasticsearch searchkick

在Rails中,我正在使用searchkick gem。用户和书有两种模式,我在用户模型上应用了searchkick。两种模型如下:

class User < ApplicationRecord
  searchkick

  has_many :books
end

class Book < ApplicationRecord
  belongs_to :user
end

图书模型有一个类型字段。现在,我想对用户模型进行不同类型的查询。

  • 搜索没有相关图书的用户。
  • 搜索至少有一本相关图书的用户。
  • 搜索至少包含特定类型图书的用户,例如“艺术”。

我尝试了很多查询,也试过加入但没有用。如果有人可以请求帮助查询以搜索此类结果。

我不想在书模型中搜索用户模型,只是在用户模型中搜索,但是有相关的书籍。

1 个答案:

答案 0 :(得分:0)

使用自定义search_data方法为搜索索引添加图书信息。

class User
  searchkick

  scope :search_import, -> { includes(:books) }

  def search_data
    {
      books_count: books.count,
      book_types: books.map(&:book_type)
    }
  end
end

class Book
  after_commit :reindex_user

  def reindex_user
    user.reindex # or reindex_async
  end
end

并搜索:

User.search("*", where: {books_count: 0})
User.search("*", where: {books_count: {gt: 0}})
User.search("*", where: {book_types: "Art"})