elasticsearch Searchjoy::Search的未定义方法“convert”

3htmauhk  于 2023-04-20  发布在  ElasticSearch
关注(0)|答案(1)|浏览(114)

我正在一个Rails4.2项目中改进搜索功能,遇到了searchkick和searchjoy gems的问题。
在Searchjoy ruby gem(v.0.3.2)文档中,它声明我们可以简单地通过调用search.convertsearch.convert(product)来转换用户搜索。

"message":"undefined method `convert' for #\u003cSearchjoy::Search:0x0000ffff808cb010\u003e"

当我放入一个log语句search.methods来查找实际可用的方法时,它显示确实在Searchjoy搜索对象中没有convert方法,但是有很多方法没有在Searchjoy::Search中记录,例如convertable_id=,convertable_id_before_type_cast,convertable_id_came_from_user?,或convertable_id?。这些方法与searchjoy文档中存在的方法不一致。
我正在阅读的文档是从ruby gems页面链接的searchjoy 0.3.2文档:https://www.rubydoc.info/gems/searchjoy/0.3.2/Searchjoy/Search#convert-instance_method
我们将它与searchkick和elasticsearch结合使用。当需要搜索时,searchjoy搜索id从searchkick搜索结果results.search.id中获取,其中results是searchkick结果对象,results.search是searchkick的关联searchjoy搜索。这就是我们如何为用户(其他用户)设置模型:

class User < ActiveRecord::Base
  has_many :searches, class_name: "Searchjoy::Search", as: :convertable
  has_many :conversions, class_name: "Searchjoy::Conversion", as: :convertable

  searchkick conversions: [:conversions]

...
  def search_data
    {
      ...
      conversions: searches.group(:query).uniq.count(:user_id)
     }
  end
...

有人知道我做错了什么吗?
更新:我更新到一个支持searchjoy转换的版本。我也在遵循searchkick 3.0的文档。它说要使用Searchjoy::搜索转换方法:

search = Searchjoy::Search.find(params[id])
   search.convert # or search.convert(item)

但是searchjoy搜索仍然给我undefined method错误。类肯定是Searchjoy::Search。我很想用文档中看到的convert方法覆盖我的初始化器中的类。

o4hqfura

o4hqfura1#

我发现我的描述中遗漏了一些相关的细节。
当我搜索时,我得到一个错误,说Searchjoy搜索字段WARNING: Can't mass-assign protected attributes:user_id,:search_type,:query等,新行将写入searchjoy_searches表,其中包含ID,但没有填写user_id等。
为了解决这个问题,我创建了一个初始化器config/initializers/searchjoy.rb,如下所示:

module Searchjoy
  class Search < ActiveRecord::Base
    attr_accessible :user_id, :search_type, :query, :normalized_query, :results_count, :convertable_id, :convertable_type, :converted_at
  end
end

而不是使用.class_eval方法:

module Searchjoy
  Search.class_eval do
    attr_accessible :user_id, :search_type, :query, :normalized_query, :results_count, :convertable_id, :convertable_type, :converted_at
  end
end

前者允许我写入表而不会出错,但它显然也部分覆盖了Searchjoy::Search类:-(
现在,我可以在搜索示例中看到convert方法,并且能够正确地写入数据库。

相关问题