我尝试使用thinking_sphinx gem在我的mysql数据库中搜索。但我遇到了一些麻烦:
我收到错误:
1.9.3-p429 :002 > Article.search "diesel"
**NoMethodError: undefined method `stringify_keys!' for "diesel":String**
from /home/pavel/.rvm/gems/ruby-1.9.3-p429/gems/meta_search-1.1.3/lib/meta_search/builder.rb:86:in `build'
from /home/pavel/.rvm/gems/ruby-1.9.3-p429/gems/meta_search-1.1.3/lib/meta_search/searches/active_record.rb:43:in `metasearch'
from (irb):2
from /home/pavel/.rvm/gems/ruby-1.9.3-p429/gems/railties-3.2.8/lib/rails/commands/console.rb:47:in `start'
from /home/pavel/.rvm/gems/ruby-1.9.3-p429/gems/railties-3.2.8/lib/rails/commands/console.rb:8:in `start'
from /home/pavel/.rvm/gems/ruby-1.9.3-p429/gems/railties-3.2.8/lib/rails/commands.rb:41:in `<top (required)>'
from script/rails:6:in `require'
from script/rails:6:in `<main>'
我做错了什么?
我的app/indices/article_index.rb
:
ThinkingSphinx::Index.define :article, :with => :active_record do
indexes :ART_ARTICLE_NR
end
(另外,我有非标准的db,字段是大写的)
的Gemfile:
gem 'thinking-sphinx'
gem 'mysql2'
为什么我收到此错误?
当我尝试时:
1.9.3-p429 :003 > Article.search(ART_ARTICLE_NR: "diesel")
我明白了:
Killed
我有sphinx 2.0.4。
答案 0 :(得分:3)
如果查看堆栈跟踪,您会发现实际上MetaSearch发出错误,而不是ThinkingSphinx。问题是两个gems都会将search
方法添加到ActiveRecord::Base
,并且您会遇到名称冲突。实际上你调用属于MetaSearch的{{1}}方法并且需要完全不同的参数。要摆脱名称冲突,请在Gemfile中的search
下添加thinking-sphinx
。在此之后,您将能够使用meta_search
运行ThinkingSphinx搜索,并使用Article.search
运行MetaSearch,而不会出现错误。
答案 1 :(得分:1)
问题是您还使用meta_search
gem。看起来它还在您的模型中添加了search
方法,该方法被重新定义为thinking_sphinx
解决方案不是使用meta_search
,例如。