我对Rails的thinking_sphinx
gem有一个奇怪的问题。
我们一直在索引应用程序中的文档内容。无论是pdf,word文档还是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的两个生成的查询的输出时,事情变得奇怪。
查找document_core
的TS生成查询的输出时,我会看到索引pdf文件的全文。好极了!正是我所希望的!
如果我在thought
模型上运行TS生成的查询,我只能获得在我们的索引:raw_text
中定义的列中找到的thought_document_raw_text
的一小部分。< / p>
由于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;
当我检查thought_document_raw_text
的内容时,显然不是整篇文章,因为字节大小较小(21876字节)
群组中的这种截然不同的目的是什么?
有什么方法可以避免产生不同的生成?
为什么我的文字blob会被切断?
如果有人遇到同样的问题,或者有大量文字的类似问题,请告知我们。提前谢谢!
编辑;我忘了提到什么。当我从生成的查询中删除DISTINCT时,输出与document_core
的其他TS查询匹配。问题与这个特定部分有关!