5

尝试使用 Thinking Sphinx 进行搜索。通过自制软件安装 TS 和 MySQL(尽管我在我的应用程序中使用 pg,这显然是必需的),在此 Railscast之后,将这些行添加到我的 gemfile 中:

gem 'mysql2'
gem 'thinking-sphinx'

并将以下内容放入我的模型中,低于其他所有内容

post.rb

class Post < ActiveRecord::Base
    #...

    define_index do 
      indexes content
      indexes :name
    end
end

然后我进入终端并尝试 rake ts:index,但我收到此错误:

 using config file '/Users/<personal>/rails_projects/<personal>/config/development.sphinx.conf'...
    FATAL: no indexes found in config file '/Users/<personal>/rails_projects/<personal>/config/development.sphinx.conf'

互联网上四处寻找,并没有找到任何可以回答这个问题的答案。我试过运行 rake ts:configure(它不会抱怨)然后 rake ts:index,但它不起作用。

一些背景知识:我刚刚更改了我的终端外壳(使用 zsh),这做出了各种奇怪的意外更改。我不得不重新安装捆绑器,然后重新捆绑安装我所有的 gem,然后独立 gem install rake。然后我捆绑更新以获得良好的衡量标准。现在 rake 似乎工作,但我仍然得到错误。

错误抱怨的配置文件:

indexer
{
}

searchd
{
  listen = 127.0.0.1:9306:mysql41
  log = /Users/<personal>/rails_projects/<personal>/log/development.searchd.log
  query_log = /Users/<personal>/rails_projects/<personal>/log/development.searchd.query.log
  pid_file = /Users/<personal>/rails_projects/<personal>/log/development.sphinx.pid
  workers = threads
  binlog_path = /Users/<personal>/rails_projects/<personal>/tmp/binlog/development
}

任何想法发生了什么/答案可能在什么代码中?

有趣的更新——我按照这个 Google Group上的问答进入我的 rails 控制台并输入“Post.sphinx_indexes.length”,但我得到了这个非常不同的错误作为回报。看起来我的模型不知何故无法访问宝石?

NoMethodError: undefined method `define_index' for #<Class:0x007f9c06c611b0>
        from /Users/<personal>/.rvm/rubies/ruby-1.9.3-p327/lib/ruby/gems/1.9.1/gems/activerecord-3.2.11/lib/active_record/dynamic_matchers.rb:55:in `method_missing'
        from /Users/<personal>/rails_projects/<personal>/app/models/post.rb:55:in `<class:Post>'
        from /Users/<personal>/rails_projects/<personal>/app/models/post.rb:13:in `<top (required)>'
        from /Users/<personal>/.rvm/rubies/ruby-1.9.3-p327/lib/ruby/gems/1.9.1/gems/activesupport-3.2.11/lib/active_support/dependencies.rb:469:in `load'
        from /Users/<personal>/.rvm/rubies/ruby-1.9.3-p327/lib/ruby/gems/1.9.1/gems/activesupport-3.2.11/lib/active_support/dependencies.rb:469:in `block in load_file'
        from /Users/<personal>/.rvm/rubies/ruby-1.9.3-p327/lib/ruby/gems/1.9.1/gems/activesupport-3.2.11/lib/active_support/dependencies.rb:639:in `new_constants_in'
        from /Users/<personal>/.rvm/rubies/ruby-1.9.3-p327/lib/ruby/gems/1.9.1/gems/activesupport-3.2.11/lib/active_support/dependencies.rb:468:in `load_file'
        from /Users/<personal>/.rvm/rubies/ruby-1.9.3-p327/lib/ruby/gems/1.9.1/gems/activesupport-3.2.11/lib/active_support/dependencies.rb:353:in `require_or_load'
        from /Users/<personal>/.rvm/rubies/ruby-1.9.3-p327/lib/ruby/gems/1.9.1/gems/activesupport-3.2.11/lib/active_support/dependencies.rb:502:in `load_missing_constant'
        from /Users/<personal>/.rvm/rubies/ruby-1.9.3-p327/lib/ruby/gems/1.9.1/gems/activesupport-3.2.11/lib/active_support/dependencies.rb:192:in `block in const_missing'
        from /Users/<personal>/.rvm/rubies/ruby-1.9.3-p327/lib/ruby/gems/1.9.1/gems/activesupport-3.2.11/lib/active_support/dependencies.rb:190:in `each'
        from /Users/<personal>/.rvm/rubies/ruby-1.9.3-p327/lib/ruby/gems/1.9.1/gems/activesupport-3.2.11/lib/active_support/dependencies.rb:190:in `const_missing'
        from (irb):1
        from /Users/<personal>/.rvm/rubies/ruby-1.9.3-p327/lib/ruby/gems/1.9.1/gems/railties-3.2.11/lib/rails/commands/console.rb:47:in `start'
        from /Users/<personal>/.rvm/rubies/ruby-1.9.3-p327/lib/ruby/gems/1.9.1/gems/railties-3.2.11/lib/rails/commands/console.rb:8:in `start'
        from /Users/<personal>/.rvm/rubies/ruby-1.9.3-p327/lib/ruby/gems/1.9.1/gems/railties-3.2.11/lib/rails/commands.rb:41:in `<top (required)>'
        from script/rails:6:in `require'
        from script/rails:6:in `<main>'irb(main):002:0> 
4

2 回答 2

5

还将这个问题发布到 Thinking Sphinx Google Group 并在那里得到了答案,所以我将其粘贴在下面。在回答了上述问题后,我遇到了另一个错误并在那里跟进,所以如果有人想要更多信息,这个讨论应该会继续提供帮助。

我引用:

嗨 Sasha 问题是 Thinking Sphinx 的文档主要用于 v2,但 v3 是您正在使用的(并且更好)。索引定义现在位于 app/indices - 自述文件是您最好的信息来源(但它未涵盖的任何内容可能与早期版本相同): https ://github.com/pat/thinking-sphinx/blob /master/README.textile

通读一遍,移动你的索引定义,你应该很高兴。有其他问题,请联系:)

——帕特

在那之后,我遇到了这个问题,这显然是因为 Sphinx 无法访问我的 PostgreSQL 数据库。

indexing index 'post_core'...
ERROR: source 'post_core_0': unknown type 'pgsql'; skipping.
ERROR: index 'post_core': failed to configure some of the sources, will not index.
total 0 reads, 0.000 sec, 0.0 kb/call avg, 0.0 msec/call avg
total 0 writes, 0.000 sec, 0.0 kb/call avg, 0.0 msec/call avg

我通过卸载 Sphinx 和两个 gem(thinking_sphinx 和 mysql2)来解决这个问题,然后用 mysql 和 pgsql 标志 brew 安装 Sphinx,然后重新安装 gem。

在那之后, rake ts:index 就像一个魅力。

于 2013-03-07T07:51:50.603 回答
3

另一个可能的错误来源是文件夹和文件的命名。额外的空格或拼写为“i”的索引将无法识别文件,因此不会生成任何索引。

那些需要 yonks 才能看到的东西……

[就我而言,这种情况并不罕见!]

于 2013-05-11T19:39:13.787 回答