Lennakim

I am lennakim

0%

Elasticsearch 与 Ransack 的 search 方法冲突

最近在项目中用 Elasticsearch 做全文搜索,
由于在之前用到 Ransack 做模糊搜索,
这2个gem都在model中添加了 search 方法,一起使用会造成冲突.

于是找到一个解决办法 es-rails-issues-96.

1 引入gem

1
2
3
gem "ransack"
gem "elasticsearch-model"
gem "elasticsearch-rails"

2 include Elasticsearch::Model

1
2
3
4
5
# /models/article.rb

class Article < ActiveRecord::Base
include Elasticsearch::Model
end

Article.search可以使用了, 由于上边说到的原因, Elasticsearch search 方法会被 Ransack覆盖.

3 解决办法

1
2
3
4
5
# /models/article.rb

def self.search_with_es(*args)
__elasticsearch__.search(*args)
end

使用 Article.search_with_es 即可.