2

我正在尝试让 Thinking Sphinx 在 Rails 中以测试模式工作。基本上是这样的:

ThinkingSphinx::Test.init
ThinkingSphinx::Test.start

冻结,永远不会回来。

我的测试和开发配置对于测试和开发是相同的:

dry_setting: &dry_setting
  adapter: mysql
  host: localhost
  encoding: utf8
  username: rails
  password: blahblah

development:
  <<: *dry_setting
  database: proj_devel
  socket: /tmp/mysql.sock  # sphinx requires it

test:
  <<: *dry_setting
  database: proj_test
  socket: /tmp/mysql.sock  # sphinx requires it

和 sphinx.yml

development:
  enable_star: 1
  min_infix_len: 2
  bin_path: /opt/local/bin

test:
  enable_star: 1
  min_infix_len: 2
  bin_path: /opt/local/bin

production:
  enable_star: 1
  min_infix_len: 2

生成的配置文件 config/development.sphinx.conf 和 config/test.sphinx.conf 仅在数据库名称、目录和类似内容上有所不同;没有任何功能。

为开发生成索引没有问题

$ rake ts:in
(in /Users/pupeno/proj)
default config
Generating Configuration to /Users/pupeno/proj/config/development.sphinx.conf
Sphinx 0.9.8.1-release (r1533)
Copyright (c) 2001-2008, Andrew Aksyonoff

using config file '/Users/pupeno/proj/config/development.sphinx.conf'...
indexing index 'user_core'...
collected 7 docs, 0.0 MB
collected 0 attr values
sorted 0.0 Mvalues, 100.0% done
sorted 0.0 Mhits, 99.8% done
total 7 docs, 422 bytes
total 0.098 sec, 4320.80 bytes/sec, 71.67 docs/sec
indexing index 'user_delta'...
collected 0 docs, 0.0 MB
collected 0 attr values
sorted 0.0 Mvalues, nan% done
total 0 docs, 0 bytes
total 0.010 sec, 0.00 bytes/sec, 0.00 docs/sec
distributed index 'user' can not be directly indexed; skipping.

但是当我尝试进行测试时,它会冻结:

$ RAILS_ENV=test rake ts:in
(in /Users/pupeno/proj)
DEPRECATION WARNING: require "activeresource" is deprecated and will be removed in Rails 3. Use require "active_resource" instead.. (called from /Users/pupeno/.rvm/gems/ruby-1.8.7-p249/gems/activeresource-2.3.5/lib/activeresource.rb:2)
default config
Generating Configuration to /Users/pupeno/proj/config/test.sphinx.conf
Sphinx 0.9.8.1-release (r1533)
Copyright (c) 2001-2008, Andrew Aksyonoff

using config file '/Users/pupeno/proj/config/test.sphinx.conf'...
indexing index 'user_core'...

已经存在10多分钟了,user表有4条记录。

数据库目录看起来很不一样,但我不知道该怎么做:

$ ls -l db/sphinx/development/
total 96
-rw-r--r--  1 pupeno  staff   196 Mar 11 18:10 user_core.spa
-rw-r--r--  1 pupeno  staff  4982 Mar 11 18:10 user_core.spd
-rw-r--r--  1 pupeno  staff   417 Mar 11 18:10 user_core.sph
-rw-r--r--  1 pupeno  staff  3067 Mar 11 18:10 user_core.spi
-rw-r--r--  1 pupeno  staff    84 Mar 11 18:10 user_core.spm
-rw-r--r--  1 pupeno  staff  6832 Mar 11 18:10 user_core.spp
-rw-r--r--  1 pupeno  staff     0 Mar 11 18:10 user_delta.spa
-rw-r--r--  1 pupeno  staff     1 Mar 11 18:10 user_delta.spd
-rw-r--r--  1 pupeno  staff   417 Mar 11 18:10 user_delta.sph
-rw-r--r--  1 pupeno  staff     1 Mar 11 18:10 user_delta.spi
-rw-r--r--  1 pupeno  staff     0 Mar 11 18:10 user_delta.spm
-rw-r--r--  1 pupeno  staff     1 Mar 11 18:10 user_delta.spp

$ ls -l db/sphinx/test/       
total 0
-rw-r--r--  1 pupeno  staff  0 Mar 11 18:11 user_core.spl
-rw-r--r--  1 pupeno  staff  0 Mar 11 18:11 user_core.tmp0
-rw-r--r--  1 pupeno  staff  0 Mar 11 18:11 user_core.tmp1
-rw-r--r--  1 pupeno  staff  0 Mar 11 18:11 user_core.tmp2
-rw-r--r--  1 pupeno  staff  0 Mar 11 18:11 user_core.tmp7

发生这种情况时,不会将任何内容添加到日志中。有什么想法可以从这里开始吗?

我可以手动运行命令行:

/opt/local/bin/indexer --config config/test.sphinx.conf --all

它将输出生成为 rake ts:in,所以没有帮助。

4

1 回答 1

2

问题是固定装置生成的随机 ID。该解决方案在http://freelancing-god.github.com/ts/en/common_issues.html#slow_indexing上进行了描述

慢速索引

如果 Sphinx 需要一段时间来处理您的所有记录,则有几个常见原因会导致这种情况发生。首先,确保您在任何外键列以及您过滤或排序依据的任何列上都有数据库索引。

其次——你在使用固定装置吗?Rails 的固定装置具有随机生成的 ID,这些 ID 通常是非常大的整数,并且默认情况下,Sphinx 没有设置为有效处理不同的 ID。为了解决这个问题,您需要在 config/sphinx.yml 文件中为适当的环境设置 sql_range_step :

development:
  sql_range_step: 10000000

我将它添加到开发和测试环境中。

于 2010-03-12T09:06:10.790 回答