Мышление Сфинкс не работает в тестовом режиме - PullRequest
2 голосов
/ 11 марта 2010

Я пытаюсь заставить Thinking Sphinx работать в тестовом режиме в Rails. В основном это:

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

зависает и никогда не возвращается.

Мои настройки test и devel одинаковы для test и devel:

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 отличаются только именами баз данных, каталогами и подобными вещами; ничего не работает.

Генерация индекса для devel проходит без проблем

$ 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 минут, в пользовательской таблице 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, так что тут никакой помощи.

1 Ответ

2 голосов
/ 12 марта 2010

Проблема заключалась в случайных идентификаторах, генерируемых приборами. Решение описано на http://freelancing -god.github.com / ts / en / common_issues.html # slow_indexing

Медленное индексирование

Если Сфинкс принимает в то время как обрабатывать все ваши записи, Есть несколько общих причин это происходит Во-первых, убедитесь, что вы иметь индексы базы данных на любой иностранный ключевые столбцы и любые столбцы, которые вы фильтруете или отсортировать по.

Во-вторых - вы используете светильники? Приспособления Rails имеют случайно сгенерированные идентификаторы, которые обычно чрезвычайно большие целые числа и сфинкс не настроен для обработки разрозненных идентификаторов эффективно по умолчанию. Обойти это, вам нужно установить sql_range_step в вашем Файл config / sphinx.yml для подходящие условия:

development:
  sql_range_step: 10000000

Я добавил его в среду разработки и тестирования.

...