2011-07-04 1 views
0

레일스 용 thinking_sphinx 보석과 함께 이상한 문제가 있습니다.thinking_sphinx 생성 된 쿼리로 큰 인덱스의 텍스트를 자르지 않습니다

Google은 신청서의 문서에서 내용의 색인을 생성했습니다. pdf, 워드 문서 또는 xls이든, 우리는 여러 명령 행 도구를 사용하여 DB에 내용을 직접 덤프합니다. 이 출력은 :raw_text이라는 DB 필드에 저장됩니다. thought라는 또 다른 모델에서

, 우리는 같은 thinking_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에서 오는 두 개의 생성 된 쿼리의 출력을 비교할 때 상황이 이상해집니다.

document_core에 대한 TS 생성 쿼리의 출력을 조회 할 때 색인 된 PDF 파일의 전체 텍스트를 볼 수 있습니다. 예! 정확히 내가 원하는 바를!

thought 모델에서 TS 생성 쿼리를 실행하는 경우 인덱스 thought_document_raw_text에 정의 된대로 :raw_text의 일부분 만 찾을 수 있습니다.

thought에 대한 TS 인덱스는 다른 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;

bytesize이기 때문에 내가 thought_document_raw_text 그것은 분명하지 전체 텍스트의 내용을 검사 할 때 더 작은 (21876 byts)

그룹 연결 내의이 별개 목적은 무엇입니까?

뚜렷한 차이가 발생하지 않도록하려면 어떻게해야합니까?

왜 내 텍스트 BLOB가 잘리지 않습니까?

누군가가 동일한 문제를 겪었거나 많은 양의 텍스트와 관련하여 비슷한 문제가 있다면 알려 주시기 바랍니다. 미리 감사드립니다!

편집; 내가 언급하는 것을 잊었던 것. 생성 된 쿼리에서 DISTINCT를 제거하면 출력은 document_core에 대한 동료 TS 쿼리와 일치합니다. 문제는이 특정 부분과 관련이 있습니다!

답변

1

이것은 MySQL의 문제이지만 Thinking Sphinx에서 어느 정도 사용자 정의 할 수 있습니다. 문서의 글자 수는 the lowdown입니다.

+0

내 색인 블록에 group_concat_max_len 옵션을 포함 시켰지만 문제가 해결되지 않았습니다. max_allowed_packet은 반드시 16MB의 기본값을 초과하지 않아야합니다. 별명은 그냥 하이킹을해야합니다 :) – Daniel

+0

sphinx.yml 파일에 group_concat_max_len을 설정하면 어떻게됩니까? – pat