Сгенерированный запрос think_sphinx обрезает мой большой проиндексированный текст - PullRequest
0 голосов
/ 04 июля 2011

У меня странная проблема с гемом thinking_sphinx для Rails.

Мы индексируем содержимое документов в нашем приложении.Будь то PDF, Word Document или XLS, мы выгружаем его содержимое напрямую в БД, используя несколько инструментов командной строки.Эти выходные данные сохраняются в поле БД с именем :raw_text.

. В другой модели, называемой thought, у нас есть индексный блок для think_sphinx:

define_index sphinx_index_name do
  indexes :title
  indexes :text
  ...
  indexes documents(:raw_text), :as => :thought_document_raw_text
  set_property                  :delta => :datetime, :delta_column => :updated_on, :threshold => TS_DELTA_INDEXING_THRESHOLD
  set_property                  :group_concat_max_len => 4294967295
end

Стоит упомянуть,атрибут raw-text документа также индексируется самой моделью document.Ситуация становится странной при сравнении вывода двух сгенерированных запросов, поступающих из TS.

При поиске вывода для запроса, сгенерированного TS для document_core я вижу весь текст проиндексированного pdf-файла.Ура!Именно то, на что я надеялся!

Если я запускаю сгенерированный TS запрос для нашей thought модели, я получаю только часть :raw_text, найденную в столбце, названном так, как мы определили в нашем индексеthought_document_raw_text.

Так как индекс TS для thought относится к другому document, запрос содержит некоторые элементы, чтобы связать эти объекты вместе.

GROUP_CONCAT(DISTINCT IFNULL('documents'.'raw_text', '0') SEPARATOR ' ') AS 'thought_document_raw_text' и LEFT OUTER JOIN 'documents' ON documents.thought_id = thoughts.id

Урезанная версия всего запроса выглядит следующим образом:

SELECT SQL_NO_CACHE 'thoughts'.'id' * 11 + 8 AS 'id' , 'thoughts'.'title' AS 'title', 'thoughts'.'text' AS 'text', GROUP_CONCAT(DISTINCT IFNULL('documents'.'filename', '0') SEPARATOR ' ') AS 'thought_document_filenames', GROUP_CONCAT(DISTINCT IFNULL('documents'.'raw_text', '0') SEPARATOR ' ') AS 'thought_document_raw_text', 'thoughts'.'id' AS 'sphinx_internal_id', CAST(IFNULL(CRC32(NULLIF('thoughts'.'type','')), 1577494256) AS UNSIGNED) AS 'class_crc', 0 AS 'sphinx_deleted' FROM 'thoughts' LEFT OUTER JOIN 'documents' ON documents.thought_id = thoughts.id GROUP BY 'thoughts'.'id', 'thoughts'.'type' ORDER BY NULL;

Когда я проверяюсодержимое thought_document_raw_text Это, очевидно, не весь текст, так как размер байта меньше (21876 байт)

Какова цель этого отличительного в группе concat?

Какие у меня есть вариантыизбежать создания различимых?

Почему мой текстовый блоб обрезается?

Если у кого-то была такая же проблема или какая-то похожая проблема с большим объемом текста, пожалуйста, дайте мне знать.Заранее спасибо!

edit;что я забыл упомянуть.Когда я удаляю DISTINCT из сгенерированного запроса, вывод совпадает с его запросом TS для document_core.Проблема связана с этой конкретной частью!

1 Ответ

1 голос
/ 04 июля 2011

Это проблема MySQL, но вы можете настроить ее до некоторой степени в Thinking Sphinx. Документы имеют нижний предел .

...