python-whoosh索引一个大型fi需要太长时间

2024-09-30 18:27:17 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个大约900万行的CSV文件。我希望能够快速地从这个文件中搜索一行。我决定使用pythonwhoosh索引这些数据,然后搜索它,如下所示。在

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示例:

^{pr2}$

Tags: 文件csv数据pathinindexosschema
1条回答
网友
1楼 · 发布于 2024-09-30 18:27:17

你的方法很好。全文搜索的折衷是用快速的查询换取缓慢的索引,因此尽可能多地提前完成工作。在

与Lucene及其生态系统(Solr,Elasticsearch)相比,Whoosh索引非常慢。在我的电脑上每秒钟大约测试540行索引。您可以预期在大约4.5到5个小时内索引900万行。添加的字段越多,尤其是要分析的字段,所需的时间就越长,因此请确保只分析必要的字段,并仅为所需的内容编制索引。在

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

你的数据看起来也很简单。如果精确的布尔查询就足够了,Pandas查询允许您更快地搜索数据帧。Pandas为基本的文本处理提供了快速的矢量化方法,您可以将这些方法用于诸如小写、非索引字删除、字符映射和正则表达式。在

你只需要真正的全文搜索,如果你需要评分和NLP设施,如词干和分词。在

相关问题 更多 >