我正在尝试使用Whoosh来索引大型语料库(大约2500万个学术摘要和标题)。我用vector=True标记了“抽象”字段,因为我需要能够基于相似性IR的摘要来计算高分的关键术语。

但是,在索引期间输入了约400万个条目后,它崩溃并出现以下错误:

Traceback (most recent call last):
  File "...", line 256, in <module>
    ...
  File "/home/nlp/*/anaconda3/envs/riken/lib/python3.6/site-packages/whoosh/writing.py", line 771, in add_document
    perdocwriter.add_vector_items(fieldname, field, vitems)
  File "/home/nlp/*/anaconda3/envs/riken/lib/python3.6/site-packages/whoosh/codec/whoosh3.py", line 244, in add_vector_items
    self.add_column_value(vecfield, VECTOR_COLUMN, offset)
  File "/home/nlp/*/anaconda3/envs/riken/lib/python3.6/site-packages/whoosh/codec/base.py", line 821, in add_column_value
    self._get_column(fieldname).add(self._docnum, value)
  File "/home/nlp/*/anaconda3/envs/riken/lib/python3.6/site-packages/whoosh/columns.py", line 678, in add
    self._dbfile.write(self._pack(v))
struct.error: 'I' format requires 0 <= number <= 4294967295


架构:

schema = Schema(title=TEXT(stored=False, phrase=False, field_boost=2.0, analyzer=my_analyzer, vector=True),
    abstract=TEXT(stored=False, phrase=False, analyzer=my_analyzer, vector=True),
    pmid=ID(stored=True),
    mesh_set=KEYWORD(stored=True, scorable=True),
    stored_title=STORED,
    stored_abstract=STORED)


索引文件夹当前的重量约为45GB。这到底是什么问题?难道Whoosh根本就没有构建来承载这些数据量吗?

最佳答案

看起来用作文档索引的字段仅设计为32位无符号整数,这给您大约4M的文档限制。

根据官方Whoosh信息库中的this issue,仅更改该字段的大小会在其他地方引起问题,因此无法轻松解决。

由于Whoosh没有得到积极维护,因此除非您想深入研究源代码,否则可能应该探索替代方法。

关于python - 在Whoosh索引过程中,向量的整数太大错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53937669/

10-11 07:41