为了账号安全,请及时绑定邮箱和手机立即绑定

python whoosh 索引大文件的时间太长

python whoosh 索引大文件的时间太长

慕容森 2021-11-16 14:49:30
我有一个包含约 900 万行的 CSV 文件。我希望能够快速从该文件中搜索一行。我决定使用 python whoosh 来索引这些数据,然后搜索它,如下所示。schema = Schema(content=TEXT(stored=True, analyzer=RegexTokenizer() | LowercaseFilter() | CharsetFilter(accent_map)))if not os.path.exists("index"):    os.mkdir("index")ix = create_in("index", schema)ix = open_dir("index")writer = ix.writer()with open(file_path, 'r', encoding='utf-8') as file:    for line in file:        writer.add_document(content=line)writer.commit()我不确定这是否是索引数据的正确/最快方法。更改架构是否会使索引更快?如果不是,使用 whoosh 或其他索引库的一般想法是否适合像这样的大文件?好消息是索引只会做一次,所以我愿意等待这是否会提供快速的搜索时间。我在全文搜索方面没有经验。有人会知道,通过我的设置,索引需要多长时间?这是我的 csv 示例:ID,TYPE,TEXT,ID21058895,1,Be,10678061058895,2,Hosl,1019381058895,3,370,None1058895,4,Tnwg,10582
查看完整描述

2 回答

?
守着一只汪

TA贡献1872条经验 获得超3个赞

你的方法没问题。与全文搜索的权衡是您用快速查询换取慢速索引,因此您可以预先完成尽可能多的工作。

与 Lucene 及其生态系统(Solr、Elasticsearch)相比,Whoosh 索引非常慢。从我的 PC 上的一些快速测试来看,它每秒索引大约 540 行。您可以在大约 4.5 到 5 小时内索引 900 万行。添加的字段越多,尤其是要分析的字段,所需的时间就越长,因此请确保仅分析必要的字段并仅索引所需的字段。

如果您计划多次查询此索引,那么在时间上的投资是值得的,并且您的查询应该相当快。如果你需要经常索引大文件,而且每次都等不及 5 个小时,那么可以考虑切换到 Lucene、Solr 或 Elasticsearch。

您的数据似乎也很简单。如果精确的布尔查询就足够了,Pandas 查询允许您更快地搜索 DataFrame。Pandas 提供了用于基本文本处理的快速矢量化方法,您可以将其用于诸如小写、停用词移除、字符映射和正则表达式之类的事情。

如果您需要评分和 NLP 工具(例如词干提取和分词),您才真正需要全文搜索。


查看完整回答
反对 回复 2021-11-16
?
潇湘沐

TA贡献1816条经验 获得超6个赞

我在这里分享了这个确切问题的官方文档页面的一部分(https://whoosh.readthedocs.io/en/latest/batch.html)。请参阅其他方法的链接,例如增加内核数量。


增加whoosh索引器的 RAM 内存量。默认设置为仅 128 MB:


    from whoosh import index


    ix = index.open_dir("indexdir")

    writer = ix.writer(limitmb=2048)

为分析器提供更多缓存,否则会显着减慢索引速度。


    w = myindex.writer()

    # Get the analyzer object from a text field

    stem_ana = w.schema["content"].format.analyzer

    # Set the cachesize to -1 to indicate unbounded caching

    stem_ana.cachesize = -1

    # Reset the analyzer to pick up the changed attribute

    stem_ana.clear()


查看完整回答
反对 回复 2021-11-16
  • 2 回答
  • 0 关注
  • 267 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信