thinking_sphinx生成的查询切断了我的大型索引文本

时间:2011-07-04 11:07:32

标签: ruby-on-rails ruby thinking-sphinx

我对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查询匹配。问题与这个特定部分有关!

1 个答案:

答案 0 :(得分:1)

这是一个MySQL问题,但您可以在Thinking Sphinx中对其进行一定程度的自定义。文档有the lowdown