Миграция приложения rails2 на rails 3, трудности с запуском индексации sphinx

Рельсы 2.3.10 переносятся на рельсы 3.2.18. Он полностью вращается вокруг полнотекстовой индексации. Версия rails 2 работала на postgresql 9.0.4, а мигрированная версия — на 9.3.5.

Таблицы данных перенесены на новые версии rails 3 без ошибок. У меня есть пара моделей, которые нуждаются в доработке, но они НЕ являются объектами, связанными с этим вопросом/кейсами.

rake ts:configure 

генерирует файл sphinx.conf. Оно выглядит немного иначе, чем нативное приложение rails3 sphinx/thinking-sphinx.

source filodiretto_core_0
{
  type = pgsql
  sql_host = localhost
  sql_user = jerdvo
  sql_pass = 
  sql_db = fna_development
  sql_query_pre = SET TIME ZONE UTC
  sql_query = SELECT "filodirettos"."id" * 24 + 0 AS "id", "filodirettos"."titolo" AS "titolo", "filodirettos"."domanda" AS "domanda", "filodirettos"."data" AS "data", "filodirettos"."risposta" AS "risposta", "filodirettos"."id" AS "sphinx_internal_id", 'Filodiretto' AS "sphinx_internal_class", 0 AS "sphinx_deleted" FROM "filodirettos"  WHERE ("filodirettos"."id" BETWEEN $start AND $end) GROUP BY "filodirettos"."id", "filodirettos"."titolo", "filodirettos"."domanda", "filodirettos"."data", "filodirettos"."risposta", "filodirettos"."id"
  sql_query_range = SELECT COALESCE(MIN("filodirettos"."id"), 1), COALESCE(MAX("filodirettos"."id"), 1) FROM "filodirettos" 
  sql_attr_uint = sphinx_internal_id
  sql_attr_uint = sphinx_deleted
  sql_attr_string = sphinx_internal_class
  sql_query_info = SELECT "filodirettos".* FROM "filodirettos"  WHERE ("filodirettos"."id" = ($id - 0) / 24)
}

index filodiretto_core
{
  type = plain
  path = /Users/jerdvo/r/fna/shared/sphinx/filodiretto_core
  docinfo = extern
  charset_type = utf-8
  min_infix_len = 2
  enable_star = 1
  source = filodiretto_core_0
}

Однако, когда я запускаю

rake ts:index

все индексы не работают

indexing index 'filodiretto_core'...
ERROR: source 'filodiretto_core_0': unknown type 'pgsql'; skipping.
ERROR: index 'filodiretto_core': failed to configure some of the sources, will not index.
[...] skipping non-plain index 'filodiretto'...

В относительном файле _index.rb указано

ThinkingSphinx::Index.define :filodiretto, :with => :active_record do
    indexes titolo
    indexes domanda
    indexes data
    indexes risposta
end

Я столкнулся с файлом pg_dump с собственным приложением rails3. Единственное отличие находится в верхней части файла, версия из rails 2 (и postgres 9.0.4) указывает (в начале)

--
-- Name: crc32(text); Type: FUNCTION; Schema: public; Owner: jerdvo
--

CREATE FUNCTION crc32(word text) RETURNS bigint
    LANGUAGE plpgsql IMMUTABLE
    AS $$
          DECLARE tmp bigint;
          DECLARE i int;
          DECLARE j int;
          DECLARE byte_length int;
          DECLARE word_array bytea;

Я не знаю, откуда эта ошибка «pgsql».


person Jerome    schedule 13.08.2014    source источник


Ответы (1)


Похоже, ваша копия Sphinx не была установлена ​​с поддержкой PostgreSQL. Вам следует переустановить его с соответствующим флагом — либо --with-pgsql, если компилируется вручную, или --pgsql при установке Homebrew. Также требуется поддержка MySQL, но может быть она уже применяется автоматически?

person pat    schedule 14.08.2014
comment
Вот оно! Наткнулся на неровность дороги на одном из indic()es ERROR: index 'norm_core': sql_range_query: ERROR: integer out of range (DSN=pgsql://jerdvo:***@localhost:5432/fna_development). Означает ли это, что какой-то столбец типа Integer имеет другое значение (десятичное, альфа...)? - person Jerome; 14.08.2014
comment
просматривая 8500 записей, только столбцы, определенные как целые числа, имеют соответствующие данные; однако некоторые имеют значения NULL, выраженные как \N... Только total 1019 docs были проиндексированы; из визуального сканирования 7 из 8 записей не имеют нулевого значения... - person Jerome; 14.08.2014
comment
Возможно, создать еще один тикет с определением индекса TS для этой модели? Но также: я вижу эту проблему с очень большими датами (обычно из-за опечатки, например, год вводится как 20014 и т. д.). Если у вас есть атрибуты даты/времени в определении индекса, стоит просмотреть там максимальные значения. - person pat; 14.08.2014
comment
да. Последовательный вопрос перемещен в stackoverflow.com/questions/25304951/ - person Jerome; 14.08.2014