Python-Whoosh BufferedWriter不提交磁盘

时间:2013-04-07 12:47:18

标签: python indexing full-text-search whoosh

以下是我尝试使用whoosh索引大型集合的示例

schema = Schema(name=TEXT(stored=True), m=ID(stored=True), content=KEYWORD(stored=True))
ix = create_in("indexdir", schema)
from whoosh.writing import BufferedWriter
from multiprocessing import Pool
jobs = []

writer = BufferedWriter(ix, period=15, limit=512, writerargs = {"limitmb": 512})
for item in cursor:
    if len(jobs) < 1024:
        jobs.append(item)
    else:
        p = Pool(8)
        p.map(create_barrel, jobs)
        p.close()
        p.join()
        jobs = []
        writer.commit()

create_barrel函数最后执行以下操作:

writer.add_document(name = name, m = item['_id'], content = " ".join(some_processed_data))

运行几个小时后,索引为空,indexdir中唯一的文件是锁定文件_MAIN_0.toc

当我切换没有AsyncWriter时,上面的代码有效,但由于某种原因,AsyncWriter错过了大约90%的提交和标准编写器对我来说太慢了。

为什么BufferedWriter会错过提交?

1 个答案:

答案 0 :(得分:0)

对于光标迭代器没有给出1024个项目的精确倍数的情况,代码看起来有点问题。

最后,你将拥有&lt;然后,作业列表中的1024个项目将离开for循环。你在for循环之后处理这个余数吗?

除此之外:你使用的是哪种嗖的版本?

您是否尝试过最新的2.4x分支和来自回购的默认分支代码?